1

我正在链接一个so,这取决于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”后缀?为什么会来?

4

1 回答 1

0

当您与动态库链接时,您不应该这样做:

gcc -shared -m32 -o ServiceProvider.so ServiceProvider.o ../../../../system/addonlibs/libmxml.so -lpthread

相反,请确保/yourpath/system/addonlibs(您应该使用完整路径而不是相对路径)在 you 中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.1to建立一个符号链接.so

编辑:

如果你这样做objdump -p libmxml.so | grep SONAME,你可能会得到libmxml.so.1. 这是您获得libmxml.so.1标识符的地方。

于 2013-06-14T07:59:04.267 回答