我的构建系统在此路径中安装了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不是一个不错的选择。
答案 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 /修复了该问题。非常感谢您有兴趣帮助解决这个问题! :)