LD_LIBRARY_PATH vs LIBRARY_PATH我正在構建一個簡單的C ++程序,我想暫時用一個系統提供的共享庫替換它的更新版本,以進行開發和測試。我嘗試設置LD_LIBRARY_PATH變量,但鏈接器(ld)失敗了:/ usr / bin / ld:找不到-lyaml-cpp我希望這可以工作,因為根據ld手冊頁:鏈接器使用以下搜索路徑來查找所需的共享庫:...對于本機鏈接器,環境變量“LD_LIBRARY_PATH”的內容...然后我嘗試設置LIBRARY_PATH,這很有效。根據GCC手冊:LIBRARY_PATH的值是以冒號分隔的目錄列表,與PATH非常相似。當配置為本機編譯器時,GCC會在搜索特殊鏈接器文件時嘗試這樣指定的目錄,如果它無法使用GCC_EXEC_PREFIX找到它們。在使用-l選項搜索普通庫時,使用GCC鏈接也會使用這些目錄(但首先使用-L指定的目錄)。正如(GCC)手冊所示,LIBRARY_PATH可行,因為我與GCC鏈接。但..由于我與gcc鏈接為什么要調用ld,因為錯誤消息表明?讓兩個變量服務于同一目的有什么意義?還有其他差異嗎?
3 回答

慕俠2389804
TA貢獻1719條經驗 獲得超6個贊
LIBRARY_PATH
gcc在編譯之前用于搜索包含需要鏈接到程序的靜態庫和共享庫的目錄。
LD_LIBRARY_PATH
在成功編譯和鏈接后,程序將使用它來搜索包含共享庫的目錄。
編輯:如下所述,您的庫可以是靜態的或共享的。如果它是靜態的,則將代碼復制到程序中,并且在編譯和鏈接程序后不需要搜索庫。如果你的圖書館是共享的,那么它需要動態鏈接到你的程序,并且當LD_LIBRARY_PATH
它發揮作用時。

鳳凰求蠱
TA貢獻1825條經驗 獲得超4個贊
LD_LIBRARY_PATH
在程序啟動時LIBRARY_PATH
搜索,在鏈接時搜索。
來自評論的警告:
使用
ld
(而不是gcc
或g++
)鏈接庫時,不會讀取LIBRARY_PATH
或LD_LIBRARY_PATH
環境變量。使用
gcc
或鏈接庫時g++
,將LIBRARY_PATH
讀取環境變量(請參閱文檔“gcc
在搜索普通庫時使用這些目錄”)。
添加回答
舉報
0/150
提交
取消