GCC編譯時指定動態庫搜尋路徑

2021-08-24 20:12:21 字數 849 閱讀 4569

補充檢視編譯好的動態庫或者程序的rpath的方法

動態庫的搜尋路徑的順序

參考資料

gcc中的rpath引數可以用編譯時指定動態庫的搜尋路徑,這樣執行時就不需要export ld_library_path了。

編譯時增加引數-wl,-rpath='.'

編譯時增加引數-wl,-z,origin -wl,-rpath='$origin'

$origin表示會搜尋程序所在目錄(同樣也可以設定-rpath=』$origin/lib』)。此方案不會出現方案一中軟鏈結找不到動態庫的情況。

通常情況下使用第二種方案是比較理想的,但是為了防止提公升許可權的漏洞,一旦進行了提公升許可權操作(比如chown root ping ;chmod u+s ping),則origin的設定會失效,執行可執行程式,會提示找不到動態庫,即使使用export ld_library_path設定了路徑也無效。

要解決此問題:

- 使用絕對路徑(此方案不可取,所以沒有親自試驗,應該是-rpath時指定絕對路徑)

- 將所依賴的so檔案拷貝到作業系統缺省會搜尋的目錄下,比如/lib或者/lib64等目錄

編譯目標**時指定的動態庫搜尋路徑;

環境變數 ld_library_path 指定的動態庫搜尋路徑;

配置檔案 /etc/ld.so.conf 中指定的動態庫搜尋路徑;

預設的動態庫搜尋路徑 /lib ;

預設的動態庫搜尋路徑 /usr/lib

gcc指定標頭檔案搜尋路徑及動態鏈結庫搜尋路徑

include 直接到系統指定的某些目錄中去找某些標頭檔案。include 先到原始檔所在資料夾去找,然後再到系統指定的某些目錄中去找某些標頭檔案。1.會在預設情況下指定到 usr include資料夾 更深層次的是乙個相對路徑,gcc可執行程式的路徑是 usr bin gcc,那麼它在實際工作時指...

linux動態庫載入時搜尋路徑

對動態庫的實際應用還不太熟悉的讀者可能曾經遇到過類似 error while loading shared libraries 這樣的錯誤,這是典型的因為需要的動態庫不在動態鏈結器ld.so的搜尋路徑設定當中導致的。1 elf可執行檔案中動態段中dt rpath所指定的路徑。這實際上是通過一種不算很...

gcc庫的搜尋路徑

1.ld會去找gcc命令中的引數 l 2.再找gcc的環境變數library path 3.再找內定目錄 lib usr lib usr local lib 這是當初compile gcc時寫在程式內的 動態鏈結時 執行時搜尋路徑順序 1.編譯目標 時指定的動態庫搜尋路徑 2.環境變數ld libr...