ld-linux.so尋找共用庫的順序__linux

來源:互聯網
上載者:User
 from http://www.iteedu.com/os/linux/mklinuxdiary/ch4mksystem/4.php ld-linux.so尋找共用庫的順序

Glibc安裝的庫中有一個為ld-linux.so.X,其中X為一個數字,在不同的平台上名字也會不同。可以用ldd查看:

#ldd /bin/catlinux-gate.so.1 => (0x00bfe000)libc.so.6 => /lib/libc.so.6 (0x00a4a000)/lib/ld-linux.so.2 (0x00a28000)

最後一個沒有=>的就是。其中第一個不是實際的庫檔案,你是找不到的,它是一個虛擬庫檔案用於和kernel互動。

ld-linux.so是專門負責尋找庫檔案的庫。以cat為例,cat首先告訴ld-linux.so它需要libc.so.6這個庫檔案,ld-linux.so將按一定順序找到libc.so.6庫再給cat調用。

那ld-linux.so又是怎麼找到的呢。其實不用找,ld-linux.so的位置是寫死在程式中的,gcc在編譯器時就寫死在裡面了。Gcc寫到程式中ld-linux.so的位置是可以改變的,通過修改gcc的spec檔案。 運行時,ld-linux.so尋找共用庫的順序

(1)ld-linux.so.6在可執行檔目標檔案中被指定,可用readelf命令查看 
(2)ld-linux.so.6預設在/usr/lib和lib中搜尋;當glibc安裝到/usr/local下時,它尋找/usr/local/lib
(3)LD_LIBRARY_PATH環境變數中所設定的路徑 
(4)/etc/ld.so.conf(或/usr/local/etc/ld.so.conf)中所指定的路徑,由ldconfig產生二進位的ld.so.cache中 編譯時間,ld-linux.so尋找共用庫的順序

(1)ld-linux.so.6由gcc的spec檔案中所設定 
(2)gcc --print-search-dirs所列印出的路徑,主要是libgcc_s.so等庫。可以通過GCC_EXEC_PREFIX來設定 
(3)LIBRARY_PATH環境變數中所設定的路徑,或編譯的命令列中指定的-L/usr/local/lib 
(4)binutils中的ld所設定的預設搜尋路徑順序,編譯binutils時指定。(可以通過“ld --verbose | grep SEARCH”來查看) 
(5)二進位程式的搜尋路徑順序為PATH環境變數中所設定。一般/usr/local/bin高於/usr/bin
(6)編譯時間的標頭檔的搜尋路徑順序,與library的尋找順序類似。一般/usr/local/include高於/usr/include

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.