2017-11-03 144 views
0

根據文檔忽略,GCC在LD_LIBRARY_PATH中查找路徑來鏈接共享庫但是在我看來,它被忽略了!LD_LIBRARY_PATH被GCC

echo $LD_LIBRARY_PATH - >:/home/mehrdad/usr/lib(所以LD_LIBRARY_PATH被currectly設置)

我已經在 「/home/mehrdad/usr/lib」 但libfoo.sogcc main.c -lfoo返回錯誤:

/usr/bin/ld: cannot find -lfoo 
collect2: error: ld returned 1 exit status 

所以有什麼問題???是LD_LIBRARY_PATH已棄用???!

gcc main.c -L/home/mehrdad/usr/lib -lfoo 

通過公正,還我可以成功執行的a.out:

但我可以成功地與明確的命令鏈接

./a.out 

似乎LD_LIBRARY_PATH由OS庫加載器,而且敬重不是GCC!

我的環境: 操作系統:CentOS的7 編譯器:GCC(海灣合作委員會)4.8.5 20150623(紅帽4.8.5-4)

+2

粗略地說,當你的可執行文件(真正的動態鏈接器)在運行時查找庫時,即在啓動程序時,會使用'LD_LIBRARY_PATH'。在編譯時,應該使用'-L'選項設置庫路徑。 –

+0

「*根據文檔,GCC在LD_LIBRARY_PATH中查找用於鏈接共享庫的路徑*」您可以鏈接到這些文檔嗎? (也許你正在將'LIBRARY_PATH'與'LD_LIBRARY_PATH'混淆?也許你的文檔是。) –

+0

謝謝你們!我真的只聽說過LD_LIBRARY_PATH! – mehrdad

回答

1

我錯了!感謝Alexandre CDavid Schwartz

LD_LIBRARY_PATH僅適用於加載程序(運行時)。

LIBRARY_PATH是根據文檔我需要什麼:

LIBRARY_PATH的值是一個冒號分隔的列表, 很像PATH。當配置爲本地編譯器時,GCC會在搜索特殊鏈接器文件時嘗試搜索 目錄,如果 找不到,則使用GCC_EXEC_PREFIX。在搜索普通庫時,使用GCC進行鏈接時也會使用 這兩個目錄來查找-l 選項(但使用-L指定的目錄優先)。