gpt4 book ai didi

c - Linux 链接一个共享对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:36:35 26 4
gpt4 key购买 nike

我正在链接一个依赖于 libmxml.so 的 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”后缀?为什么会来?

最佳答案

当你链接一个动态库时,你不应该这样做:

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

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

编辑:

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

关于c - Linux 链接一个共享对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17103460/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com