動態鏈結庫的路徑及依賴

2021-06-27 18:40:31 字數 1327 閱讀 1744

1、依賴查詢

1.1 objdump

乙個 動態庫還可能依賴別的動態庫,可用以下命令去查詢[7]:

$ objdump -x lib***xx.so | grep needed
以libpng12.so.0為例,查詢結果如下:

liyihai@ubuntu:/lib/i386-linux-gnu$ objdump -x libpng12.so.0 | grep needed

needed libz.so.1

needed libm.so.6

needed libc.so.6

1.2 ldd[11]

還可以直接使用ldd命令檢視動態庫的依賴關係:

ldd lib***.so

2、-l、-rpath、-rpath-link

就算使用第1章的方法找到了libpng12.so.0所依賴的庫,而且放到和libpng12.so.0同乙個目錄中,編譯時還是可能找不到。使用-l可以指定可執行檔案編譯時需要的庫目錄,而動態庫依賴於其它庫的目錄需要使用-rpath、rpath-link來指定[9]。

由於-rpath、rpath-link都是ld的引數,而不是gcc的,因此如果是gcc中使用這兩個引數,要使用-wl選項[10],例如:

$gcc  hello.c -wl,-rpath-link /usr/local/lib

3、函式

如果知道.so中包含了那些函式呢?,以libc.so.6為例,使用以下命令可以查詢其中包含的函式[1]。

$ readelf -s libc.so.6

參考資料

[1]linux下,怎麼用shell命令或指令碼檢視.so檔案裡面的所有函式名

[2]linux下檢視動態鏈結庫so檔案的依賴的相關組建

[4]linux下so動態庫一些不為人知的秘密(中)

[6]怎麼讓gcc編譯出來的so檔案不依賴於libgcc_s.so.1?

[7]在linux下檢視so的依賴庫 

[8]linux下如何檢視共享庫so版本號

[9]動態庫的鏈結和鏈結選項-l,-rpath-link,-rpath

[10]ld的-rpath與-rpath-link選項

[11]linux下檢視動態鏈結庫依賴關係的命令

gcc指定標頭檔案路徑及動態鏈結庫路徑

include 直接到系統指定的某些目錄中去找某些標頭檔案。include 先到原始檔所在資料夾去找,然後再到系統指定的某些目錄中去找某些標頭檔案。1.會在預設情況下指定到 usr include資料夾 更深層次的是乙個相對路徑,gcc可執行程式的路徑是 usr bin gcc,那麼它在實際工作時指...

Linux下動態鏈結庫載入路徑及搜尋路徑問題

引子 近日,伺服器遷移後,偷懶未重新編譯nginx的,直接.nginx啟動,結果遇到如下問題 error while loading shared libraries 這是是因為需要的動態庫不在動態鏈結器ld.so的搜尋路徑導致。ld.so 程式設計客棧動態共享庫搜尋順序 1 elf可執行檔案中動態...

Ubuntu linux 新增動態鏈結庫路徑

include etc ld.so.conf.d conf usr local lib 然後更新 etc so.cache sudo ldconfig usr local lib 方法三 設定 ld library path 庫所在目錄 多個目錄用 分隔 回到頂部 以root身份把庫路徑加入到 et...