如何列出从.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