不卡AV在线|网页在线观看无码高清|亚洲国产亚洲国产|国产伦精品一区二区三区免费视频

學(xué)習(xí)啦>學(xué)習(xí)電腦>操作系統(tǒng)>Linux教程>

ld-linux.so查找共享庫的順序介紹

時(shí)間: 若木635 分享

  ld-linux.so查找共享庫的順序

  Glibc安裝的庫中有一個(gè)為ld-linux.so.X,其中X為一個(gè)數(shù)字,在不同的平臺(tái)上名字也會(huì)不同??梢杂胠dd查看:

  #ldd /bin/cat

  linux-gate.so.1 => (0x00bfe000)

  libc.so.6 => /lib/libc.so.6 (0x00a4a000)

  /lib/ld-linux.so.2 (0x00a28000)

  最后一個(gè)沒有=>的就是。其中第一個(gè)不是實(shí)際的庫文件,你是找不到的,它是一個(gè)虛擬庫文件用于和kernel交互。

  ld-linux.so是專門負(fù)責(zé)尋找?guī)煳募膸?。以cat為例,cat首先告訴ld-linux.so它需要libc.so.6這個(gè)庫文件,ld-linux.so將按一定順序找到libc.so.6庫再給cat調(diào)用。

  那ld-linux.so又是怎么找到的呢?其實(shí)不用找,ld-linux.so的位置是寫死在程序中的,gcc在編譯程序時(shí)就寫死在里面了。Gcc寫到程序中l(wèi)d-linux.so的位置是可以改變的,通過修改gcc的spec文件。

  運(yùn)行時(shí),ld-linux.so查找共享庫的順序

  (1)ld-linux.so.6在可執(zhí)行的目標(biāo)文件中被指定,可用readelf命令查看

  (2)ld-linux.so.6缺省在/usr/lib和lib中搜索;當(dāng)glibc安裝到/usr/local下時(shí),它查找/usr/local/lib

  (3)LD_LIBRARY_PATH環(huán)境變量中所設(shè)定的路徑

  (4)/etc/ld.so.conf(或/usr/local/etc/ld.so.conf)中所指定的路徑,由ldconfig生成二進(jìn)制的ld.so.cache中

  編譯時(shí),ld-linux.so查找共享庫的順序

  (1)ld-linux.so.6由gcc的spec文件中所設(shè)定

  (2)gcc --print-search-dirs所打印出的路徑,主要是libgcc_s.so等庫。可以通過GCC_EXEC_PREFIX來設(shè)定

  (3)LIBRARY_PATH環(huán)境變量中所設(shè)定的路徑,或編譯的命令行中指定的-L/usr/local/lib

  (4)binutils中的ld所設(shè)定的缺省搜索路徑順序,編譯binutils時(shí)指定。(可以通過“ld --verbose | grep SEARCH”來查看)

  (5)二進(jìn)制程序的搜索路徑順序?yàn)镻ATH環(huán)境變量中所設(shè)定。一般/usr/local/bin高于/usr/bin

  (6)編譯時(shí)的頭文件的搜索路徑順序,與library的查找順序類似。一般/usr/local/include高于/usr/include

ld-linux.so查找共享庫的順序介紹

ld-linux.so查找共享庫的順序 Glibc安裝的庫中有一個(gè)為ld-linux.so.X,其中X為一個(gè)數(shù)字,在不同的平臺(tái)上名字也會(huì)不同。可以用ldd查看: #ldd /bin/cat linux-gate.so.1 = (0x00bfe000) libc.so.6 = /lib/libc.so.6 (0x00a4a000) /lib/ld
推薦度:
點(diǎn)擊下載文檔文檔為doc格式
75418