生成的二进制文件链接到使用系统而不是本地库

时间:2017-03-10 15:04:05

标签: gcc shared-libraries ld libtiff

我的构建系统在此路径中安装了libtiff:

/usr/lib/x86_64-linux-gnu/libtiff.so.5.2.4

我在本地路径中构建了一个自定义libtiff:

/home/user/libtiff/usr/local/lib/libtiff.so.3.8.2

我想在我的本地路径上构建一个与libtiff链接的二进制文件。为此,我使用此命令:

cc -o binary \
    obj1.o ... objn.o \
    -L /home/user/libtiff/usr/local/lib/ \
    -Wl,-rpath,L/home/user/libtiff/usr/local/lib/ \
    -ltiff

问题是在链接和生成二进制文件之后,ldd显示二进制文件没有使用本地libtiff,而是在构建系统上安装了库:

$ ldd binary | grep libtiff
libtiff.so.5 => /usr/lib/x86_64-linux-gnu/libtiff.so.5 (0x00007fbaf9ad6000)

我不明白为什么链接器没有使用本地库。

我已经阅读了一些关于设置LD_LIBRARY_PATH,LD_PRELOAD或LIBRARY_PATH的相关帖子,但它们都没有按预期工作。

修改/etc/ld.so.conf不是一个不错的选择。

2 个答案:

答案 0 :(得分:1)

删除根斜杠前面的虚假L

-Wl,-rpath,L/home/user/libtiff/usr/local/lib/

答案 1 :(得分:0)

@yugr,谢谢你这个小费的提示。它帮助我解决了这个问题。问题在于本地编译的另一个库(spandsp)依赖于libtiff。 spandsp的configure脚本决定使用libtiff.so.5(构建系统)而不是libtiff.so.3(本地编译)。这是因为在执行configure脚本之前没有正确定义LDFLAGS。将LDFLAGS定义为-L / home / user / usr / local / lib / -Wl,-rpath-link,/ home / user / usr / local / lib /修复了该问题。非常感谢您有兴趣帮助解决这个问题! :)