我的構建系統已安裝在這條道路的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不是一個不錯的選擇。
刪除根斜槓前面的虛假L會得到完全相同的問題。命令ldd顯示libtiff與安裝在構建系統(libtiff.so.5)上的庫鏈接,而不是與本地庫(libtiff.so.3)鏈接。該二進制文件與多個本地庫鏈接(例如,它也使用mbedtls)。 mbedtls庫也安裝在構建系統上,但對於此庫,ldd顯示它正在使用本地庫。沒有刪除虛假L我得到完全相同的問題。 – aicastell
@aicastell嗯,我無法在本地重現此問題,因此無法提供更多信息。也許你可以用'-Wl,-verbose'和'LD_DEBUG = libs'運行? – yugr