如何列出從.so文件導出的符號? 若是可能的話,我也想知道它們的來源(例如,若是它們是從靜態庫中提取的)。 c++
我正在使用gcc 4.0.2,若是有區別的話。 git
對於共享庫libNAME.so,必須使用-D開關才能在Linux中查看符號 正則表達式
nm -D libNAME.so
以及其餘人報告的靜態庫 工具
nm -g libNAME.a
若是您的.so
文件爲elf格式,則能夠使用readelf程序從二進制文件中提取符號信息。 該命令將爲您提供符號表: spa
readelf -Ws /usr/lib/libexample.so
您只應提取在此.so
文件中定義的文件,而不是在該文件所引用的庫中的文件。 在這種狀況下,第七列應包含一個數字。 您能夠使用簡單的正則表達式將其提取: code
readelf -Ws /usr/lib/libstdc++.so.6 | grep '^\([[:space:]]\+[^[:space:]]\+\)\{6\}[[:space:]]\+[[:digit:]]\+'
或者,按照Caspin的建議: get
readelf -Ws /usr/lib/libstdc++.so.6 | awk '{print $8}';
objdump -TC /usr/lib/libexample.so
對於Android .so
文件,NDK工具鏈附帶了其餘答案中提到的必需工具: readelf
, objdump
和nm
。 it
您能夠使用binutils工具鏈中的nm -g
工具。 可是,它們的來源並不老是隨時可用。 並且我什至不肯定該信息是否老是能夠檢索到。 也許objcopy
揭示了更多信息。 io
/編輯:該工具的名稱固然是nm
。 標誌-g
用於僅顯示導出的符號。 awk