【问题标题】:Linux linking a shared objectLinux 链接共享对象
【发布时间】:2013-06-14 07:40:09
【问题描述】:

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

【问题讨论】:

  • 你真的有libmxml的共享库,还是静态库?
  • 它是一个共享库,我确实有构建中的 libmxml.so
  • 不,我不能编辑 /lib -> 没有 root 权限
  • 可以将“libmxml.so”的路径添加到“LD_LIBRARY_PATH”中。
  • 你的意思是 LIBRARY_PATH 吗?因为我有编译问题。

标签: c linux gcc ld


【解决方案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 并创建一个从 .so.1.so 的符号链接。

编辑:

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

【讨论】:

  • 或单独使用-l 选项,如下所示:-l/yourpath/system/addonlibs/libmxml.so.1
  • 您确定要导出 LD_LIBRARY_PATH 吗?我猜它只是LIBRARY_PATH。您没有回答关于“.so.1”的问题
  • 编辑了我的答案(见末尾的objdump 行)。
  • 是的!就是这样,如果你用LIBRARY_PATH替换LD_LIBRARY_PATH,我会接受答案!
  • 是的,你是对的。 LIBRARY_PATH 用于链接器,LD_LIBRARY_PATH 用于....ld。会修复它。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多