2017-03-10 49 views
0

我的構建系統已安裝在這條道路的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不是一個不錯的選擇。

回答

1

根斜線前面取出假L

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

刪除根斜槓前面的虛假L會得到完全相同的問題。命令ldd顯示libtiff與安裝在構建系統(libtiff.so.5)上的庫鏈接,而不是與本地庫(libtiff.so.3)鏈接。該二進制文件與多個本地庫鏈接(例如,它也使用mbedtls)。 mbedtls庫也安裝在構建系統上,但對於此庫,ldd顯示它正在使用本地庫。沒有刪除虛假L我得到完全相同的問題。 – aicastell

+1

@aicastell嗯,我無法在本地重現此問題,因此無法提供更多信息。也許你可以用'-Wl,-verbose'和'LD_DEBUG = libs'運行? – yugr

0

@yugr,感謝您對本-verbose提示。它幫助我解決了這個問題。問題在於本地編譯的另一個庫(spandsp)依賴於libtiff。 spandsp的配置腳本決定使用libtiff.so.5(構建系統)而不是libtiff.so.3(本地編譯)。這是因爲LDFLAGS在執行配置腳本之前沒有正確定義。將LDFLAGS定義爲-L/home/user/usr/local/lib/-Wl,-rpath-link,/ home/user/usr/local/lib /修復了問題。非常感謝您對幫助解決這個問題的興趣! :)

+1

Np,很高興提供幫助。 – yugr