windows與linux動態庫搜尋順序

來源:互聯網
上載者:User

開啟動態庫函數(dlopen或LoadLibrary)中指定動態庫的檔案名稱,在程式運行時按照以下次序來搜尋動態庫

一、庫檔案的搜尋路徑:

1、在設定檔/etc/ld.so.conf中指定動態庫搜尋路徑(需要添加其它庫檔案的路徑,在檔案的最後添加具體的路徑即可 [ 如:/usr/local/lib ],添加後儲存退出,然後在命令列ldconfig

2、通過環境變數LD_LIBRARY_PATH指定動態庫搜尋路徑(當通過該環境變數指定多個動態庫搜尋路徑時,路徑之間用冒號":"分隔)

3、在編譯目標代碼時指定該程式的動態庫搜尋路徑(還可以在編譯目標代碼時指定程式的動態庫搜尋路徑。 這是通過gcc 的參數"-Wl,-rpath,"指定,當指定多個動態庫搜尋路徑時,路徑之間用冒號":"分隔)

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

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

使用GCC編譯,則有:gcc -o test test.c -L../ -lmylib -Wl,-rpath,/home/wangl/testWork

其中,

-L../表明在連結時,從../目錄尋找需要連結的動態庫;

-lmylib 表明要連結的庫名為libmylib.so;

-Wl,-rpath,/home/wangl/testWork表明在執行時,從/home/wangl/testWork目錄尋找要載入的動態庫。

註:-Wl,-rpath可以指定絕對路徑,也可以指定相對路徑。

如果指定相對路徑,則程式在執行時,會以程式的目前的目錄為基礎來計算相對路徑。

可以使用ldd命令查看當前程式依賴的動態庫的路徑。

Linux下搜尋路徑的次序:

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

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

3)  環境變數LD_LIBRARY_PATH指定的動態庫搜尋路徑;(LIBRARY_PATH環境變數:指定程式靜態連結庫檔案搜尋路徑,LD_LIBRARY_PATH環境變數:指定程式動態連結程式庫檔案搜尋路徑)

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

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

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



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

 在windows下,程式執行時,會在目前的目錄下尋找相應的dll庫。如果在目前的目錄下找不到,就會到系統目錄system和system32中去找。

Windows下搜尋路徑次序

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

2)  Windows的系統目錄(該目錄可以通過GetSystemDirectory函數獲得);

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

4)  Windows目錄(該目錄可以通過GetWindowsDirectory函數獲得);

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

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

註:工作目錄位於Windows目錄之後,這一改變開始於Windows XP SP2之後

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.