回覆列表
  • 1 # lmmik24950

    LD_LIBRARY_PATH環境變數主要是用於指定動態連結器(ld)查詢ELF可執行檔案執行時所依賴的動態庫(so)的路徑,其內容是以冒號分隔的路徑列表。ld連結器將優先在該變數設定的路徑中查詢,若未找到則在標準庫路徑/lib和/usr/lib中繼續搜尋。臨時設定LD_LIBRARY_PATH環境變數的最佳方式是:在執行你的程式前,先在bash中透過命令列或指令碼來設定,這樣你的特殊設定對系統的其它程式的執行而言是隔離的,不會影響其他程式對依賴庫的查詢路徑,因為在bash中設定的環境變數只對本次會話有效。在你下次透過SSH工具連線到系統時,新會話的系統環境變數引數不受上次會話的設定影響。如:$ export LD_LIBRARY_PATH="/list/of/library/paths:/another/path"$ ./program但是,你如果希望對LD_LIBRARY_PATH環境變數的設定永久生效,上面的方式就不適合了。如果你的所有程式都需要連結到某個自定義的查詢路徑指定的動態庫檔案,若某次執行程式前你忘記了設定LD_LIBRARY_PATH環境變數,這樣你的程式會連結到其他動態庫,可能會導致詭異的結果或意外崩潰,而且在可能存在潛在的安全問題。如果不考慮上述的各種情況,你可以透過修改home目錄下的 .bashrc 檔案來設定LD_LIBRARY_PATH環境變數,這樣每次當你啟用一個會話連線到系統時,系統會自動執行該檔案指定的命令,這樣免去了每次手動設定相關引數的麻煩。增加如下一行:export LIBRARY_PATH="/list/of/library/paths:/another/path"一般情況下,只有當程式所需的依賴庫不是系統標準安裝的庫或對庫的版本特定要求時,可以指定 LD_LIBRARY_PATH環境變數實現。透過下面的命令可以檢視可執行檔案或庫檔案本身對所依賴的庫的情況:$ ldd ~/myprogram輸出類似:librt.so.1 => /lib/librt.so.1 (0x00002b4eca08e000)libc.so.6 => /lib/libc.so.6 (0x00002b4eca49f000)libpthread.so.0 => /lib/libpthread.so.0 (0x00002b4eca7df000)/lib64/ld-linux-x86-64.so.2 (0x00002b4ec9e72000)libmylib.so.1 => not found檢查結果表明, 連結器無法找到依賴的庫libmylib.so.1 我們假設存在這個庫 在~/yprogdir/lib/libmylib.so.1, 現在我們可能透過設定LD_LIBRARY_PATH環境變數以便連結器找到。$ export LD_LIBRARY_PATH="~/myprogdir/lib/:$LD_LIBRARY_PATH"$ ldd ~/myprogram輸出如下:librt.so.1 => /lib/librt.so.1 (0x00002b4eca08e000)libc.so.6 => /lib/libc.so.6 (0x00002b4eca49f000)libpthread.so.0 => /lib/libpthread.so.0 (0x00002b4eca7df000)/lib64/ld-linux-x86-64.so.2 (0x00002b4ec9e72000)libmylib.so.1 => ~/myprogdir/lib/libmylib.so.1 (0x00002b4eca9fa000)這樣動態連結器就可能找到所有需要的庫檔案 。

  • 中秋節和大豐收的關聯?
  • 影星吳孟達因病去世,享年68歲,為何手術成功沒保住人?