歡迎您光臨本站 註冊首頁

關於Linux中的庫

←手機掃碼閱讀     火星人 @ 2014-03-26 , reply:0

  soname
  形式一般為lib.so.,以symbol link的方式存在於文件系統中,version的不同反映了介面的改變,其指向的實際文件的名字通常是在soname后加上..

  ldd/ldconfig
  一個程序/shared庫一般都要依賴其他的一些庫,這可以用ldd來查看,它列出了依賴的庫的soname,因為實際依賴是庫的介面,而soname正是反映了庫的介面信息。linux使用ELF作為可執行程序和庫的格式,這些依賴的庫的soname保存在ELF的某個fileld里。當一個可執行程序執行時,ld.so負責把它所依賴的shared庫載入到內存並鏈接,它按照以下順序尋找shared庫:

  在LD_LIBRARY_PATH環境變數指定的目錄下
  ld.so.cache文件該shared庫對應的文件
  /usr/lib和/lib目錄下

  ldconfig 建立或更新soname,並把其對應關係寫入緩存文件ld.so.cache以加快載入速度,ld.so將主要使用這個ld.so.cache來尋找庫文件,所以當拷貝shared庫到一個不是/usr/lib和/lib的目錄后,要運行ldconfig更新ld.so.cache以使ld.so能找到這個shared庫。ldconfig能夠建立和更新soname是因為ELF文件有一個field保存了其對應的soname。

  ld
  ld是GNU linker,是創建一個可執行程序/庫最後一步使用的工具。

  -shared
  創建一個shared library

  -L
  ld在一個目錄列表裡搜索要連接的archive文件,該選項添加指定目錄到預設目錄列表的前面。預設目錄列表依賴ld使用的模擬模式,gcc里有個選項-print-search-dirs可以列出當前系統的預設目錄列表。

  -l
  添加文件到要連接的archive文件列表。ld將在搜索archive的目錄列表裡搜索libarchive.so文件,如果不存在則使用libarchive.a文件

  -rpath-link
  當用ld創建一個靜態可執行程序(non-shared, non-relocatable,不依賴其他shared library獨立運行)時,其輸入的shared library(直接依賴)可能又依賴另外的shared library,如果不把這種間接依賴的shared library也包括到靜態可執行程序里,其結果就不能獨立運行。這個option指定了搜尋這種required shared library的路徑,不過ld並不只是在該option指定的路徑搜索,具體ld搜索required shared library的各個位置和順序在man里有詳細的說明。

[火星人 ] 關於Linux中的庫已經有621次圍觀

http://coctec.com/docs/linux/show-post-188105.html