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