Window和Linux動態庫搜尋路徑的次序

2021-08-26 04:38:29 字數 859 閱讀 1438

最近在做的專案中使用到動態庫的動態載入技術,windows和linux都提供了相應的函式來開啟動態庫、獲取函式指標和關閉動態庫

,在開啟動態庫函式(dlopen或loadlibrary)中指定動態庫的檔名後,在程式執行時是以什麼次序來搜尋動態庫呢?

linux下搜尋路徑的次序:

1) elf可執行檔案中動態段中dt_rpath所指定的路徑,不常用但是比較使用的方法;

2) 編譯目標**時指定的動態庫搜尋路徑(-wi,-rpath=./);

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

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

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

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

在上述1-3中指定的動態庫搜尋路徑都可以指定多個搜尋目錄,其先後順序是按指定路徑的先後順序搜尋的。如果動態庫之間存在依賴關係,那麼先載入那些被依賴的動態庫。

windows下搜尋路徑次序

1) 可執行檔案所在的目錄(當前目錄);

2) windows的系統目錄(該目錄可以通過getsystemdirectory函式獲得);

3) 16位的系統目錄(windows目錄下的system子目錄);

4) windows目錄(該目錄可以通過getwindowsdirectory函式獲得);

5) 程序當前所在的工作目錄;

6) path環境變數中所列出的目錄。

注:工作目錄位於windows目錄之後,這一改變開始於windows xp sp2之後。

linux 靜態庫和動態庫

1.生成方式 靜態庫 首先將原始檔編譯成目標檔案 gcc c test.c o test.o 然後生成靜態庫 ar rc libstatic.a test.o 共享庫 首先將原始檔編譯成目標檔案 gcc c test.c o test.o 生成共享庫 gcc fpic shared o libsha...

Linux 靜態庫和動態庫

庫有兩種,一種是靜態鏈結庫,一種是動態鏈結庫,不管是哪一種庫,要使用它們,都要在程式中包含相應的include標頭檔案。我們先來回顧一下程式編譯的過程。如下圖 庫 本質乙個目標檔案,這個檔案的字尾有兩種格式,對應兩種庫 缺點是 檔案太大。多次拷貝庫程式,不僅浪費空間,而且檔案體積大 下面實現乙個靜態...

Linux 靜態庫和動態庫

我們指定c程式從 到乙個可執行程式需要經過預處理 編譯 彙編 鏈結。而最後一步鏈結又分為動態鏈結與靜態鏈結。靜態鏈結相當於就是講所要鏈結的庫提前放入鏈結的檔案,這樣子的檔案體積較大,但是可移植性較高。而動態鏈結是在執行的時候才去主動鏈結所需要鏈結的庫,這樣的 體積較小,多個程式共同使用庫的 我們li...