linux檢視靜態庫和動態庫有哪些函式

2021-10-01 23:47:51 字數 1054 閱讀 7156

功能:列出.o、.a、.so中的符號資訊,包括符號的值,符號型別及符號名稱等。所謂符號,通常指定義出的函式,全域性變數等

使用:

nm [option(s)

][file(s)

]

示例:

# 檢視靜態庫或動態庫定義了哪些函式

nm -n --defined-only ***x.a

nm -g -c --defined-only ***x.so

nm -d ***x.so

# 顯示hello.a 中的未定義符號,需要和其他物件檔案進行鏈結.

nm -u hello.o

# 在 ./ 目錄下找出哪個庫檔案定義了close_socket函式.

nm -a .

/* 2>/dev/null | grep "t close_socket"

示例:

# 檢視動態庫有哪些符號,包括資料段、匯出的函式和引用其他庫的函式

objdump -tt ***.so

objdump -x ***.a

# 檢視動態庫依賴項

objdump -x ***.so | grep "needed"

# 檢視動態符號表

objdump -t ***.so

## 假如想知道 ***.so 中是否匯出了符號 yyy ,那麼命令為 objdump -t ***.so | grep "yyy" 。

# 檢視動態符號表

objdump -t ***.so

## -t 和 -t 選項在於 -t 只能檢視動態符號,如庫匯出的函式和引用其他庫的函式,而 -t 可以檢視所有的符號,包括資料段的符號。

功能:用於檢視elf格式的檔案資訊,常見的檔案如在linux上的可執行檔案,動態庫(.so)或者靜態庫(.a) 等包含elf格式的檔案。

示例:

# 檢視靜態庫定義的函式

readelf -c ***.a

# 檢視靜態庫定義的函式

readelf -a ***.so

linux 靜態庫和動態庫

1.生成方式 靜態庫 首先將原始檔編譯成目標檔案 gcc c test.c o test.o 然後生成靜態庫 ar rc libstatic.a test.o 共享庫 首先將原始檔編譯成目標檔案 gcc c test.c o test.o 生成共享庫 gcc fpic shared o libsha...

Linux 靜態庫和動態庫

庫有兩種,一種是靜態鏈結庫,一種是動態鏈結庫,不管是哪一種庫,要使用它們,都要在程式中包含相應的include標頭檔案。我們先來回顧一下程式編譯的過程。如下圖 庫 本質乙個目標檔案,這個檔案的字尾有兩種格式,對應兩種庫 缺點是 檔案太大。多次拷貝庫程式,不僅浪費空間,而且檔案體積大 下面實現乙個靜態...

Linux 靜態庫和動態庫

我們指定c程式從 到乙個可執行程式需要經過預處理 編譯 彙編 鏈結。而最後一步鏈結又分為動態鏈結與靜態鏈結。靜態鏈結相當於就是講所要鏈結的庫提前放入鏈結的檔案,這樣子的檔案體積較大,但是可移植性較高。而動態鏈結是在執行的時候才去主動鏈結所需要鏈結的庫,這樣的 體積較小,多個程式共同使用庫的 我們li...