我正在链接一个,这取决于libmxml.so。但是我没有权限安装libmxml.so。
这就是我在做什么
gcc -shared -m32 -o ServiceProvider.so ServiceProvider.o -L ../../../../system/addonlibs/ -lmxml -lpthread
ldd告诉我
ldd ServiceProvider.so
libmxml.so.1 => not found
libpthread.so.0 => /lib/libpthread.so.0 (0x40026000)
libc.so.6 => /lib/libc.so.6 (0x40046000)
第二次尝试是
gcc -shared -m32 -o ServiceProvider.so ServiceProvider.o ../../../../system/addonlibs/libmxml.so -lpthread
仍然ldd告诉我
ldd ServiceProvider.so
libmxml.so.1 => not found
libpthread.so.0 => /lib/libpthread.so.0 (0x40026000)
libc.so.6 => /lib/libc.so.6 (0x40046000)
因此,ldd找不到库,因为我只有“libmxml.so”,但没有“libmxml.so.1”。如何摆脱这个“.1”后缀?为什么会这样?
答案 0 :(得分:0)
当您与动态库链接时,您不应该这样做:
gcc -shared -m32 -o ServiceProvider.so ServiceProvider.o ../../../../system/addonlibs/libmxml.so -lpthread
相反,请确保/yourpath/system/addonlibs
({1}}(您应该使用完整路径而不是相对路径)在LIBRARY_PATH
中。然后改变你的链接命令。
export LIBRARY_PATH=/yourpath/system/addonlibs:$LIBRARY_PATH
gcc -shared -m32 -o ServiceProvider.so ServiceProvider.o -lmxml -lpthread
您也可以写下:
gcc -shared -m32 -o ServiceProvider.so ServiceProvider.o -L/yourpath/system/addonlibs -lmxml -lpthread
但是,要运行程序,您需要在LD_LIBRARY_PATH
。
如果您遇到.so
和.so.1
内容的问题,请将您的.so重命名为.so.1并制作符号链接.so.1
至.so
。
修改强>
如果您执行objdump -p libmxml.so | grep SONAME
,您可能会获得libmxml.so.1
。
这是您获得libmxml.so.1
标识符的地方。