怎麼查看頭文件、so庫裏和函數的對應關係

1,查看某個so在Linux(Ubuntu)系統下的路徑

ldconfig -p | grep xxx.so

2,查看某個 so庫裏有什麼函數

nm -D xxx.so
或
objdump -tT xxx.so

如果輸出符號T,則函數正常導出
如果輸出符號U,則函數爲定義
這裏寫圖片描述

這裏寫圖片描述

3,怎麼確定頭文件和庫的對應關係?

rpm -qf /usr/include/pthread.h //獲得包的名稱
rpm -ql <包的名稱> //獲得包中文件的列表

例:

linux-bjpdOq:~ # rpm -qf /usr/include/securec.h
libsecurec-devel-1.1.1-004.005.x86_64
linux-bjpdOq:~ # rpm -ql libsecurec-devel-1.1.1-004.005.x86_64
/usr/include/securec.h
/usr/include/securectype.h
/usr/lib64/libsecurec.a

但是,對於系統庫的文件,比如:

linux-bjpdOq:~ # rpm -qf /usr/include/dlfcn.h
glibc-headers-2.17-196.h22.x86_64

dlfcn.h是一個頭文件,調用動態鏈接庫用的,rpm -ql 查看裏面全是頭文件,發現沒有找到庫。

這時讓我們回憶一下動態庫的使用,庫文件名爲libxxx.so,除了在源碼裏包含頭文件,我們還需要在鏈接這個庫時用 -lxxx 參數.

因此,如果我們知道鏈接這個庫時用的 -ldl參數,我們可以直接確定該so:

# ll /lib64/ | grep libdl
...
# nm -D /lib64/libdl-2.17.so |grep dlopen
0000000000001020 T dlopen
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章