You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查看动态链接库(.so)中的文件及目标文件列表?

查看动态链接库(.so)中目标文件相关信息的方法

好问题!先得掰扯清楚静态库和动态链接库的本质区别:静态库(.a)说白了就是一堆目标文件(.o)的打包归档,所以ar -t能直接列出里面的.o文件;但动态链接库(.so)是经过链接器处理后的ELF格式共享二进制文件,它已经把所有输入的.o文件的代码、数据段都合并到一起了,并没有保留单独的.o文件条目。不过我们还是有办法追踪到动态库中来自原始.o文件的信息,具体如下:

  • 借助调试信息查看原始编译单元(对应.o文件)
    如果编译动态库时加上了-g参数保留调试符号,那么可以用objdump工具提取调试信息,找到每个原始.o对应的编译单元:

    objdump --dwarf=info libexample.so | grep -A5 -B5 "DW_TAG_compile_unit"
    

    输出结果里的DW_AT_name字段会显示生成该.o文件的源文件名(比如foo.c),间接对应原始的.o文件。

  • 通过符号表追踪.o文件归属
    如果没有保留调试信息,但链接时没有去掉符号表(默认编译一般会保留),可以用readelf查看符号,部分符号会携带原始.o文件的信息:

    readelf -s libexample.so | grep ".o"
    

    这种方法的效果取决于编译选项,不一定能覆盖所有.o文件,但能找到一些线索。

  • 如果只是想查看动态库的符号(而非.o文件)
    要是你其实只是想确认动态库包含哪些函数/符号,而非原始.o文件列表,那用nm或readelf更直接:

    # 显示动态符号表
    nm -D libexample.so
    # 或者用readelf
    readelf -sD libexample.so
    

总结一下:没有和ar -t完全等价的命令能直接列出.so中的.o文件(因为.so的结构和静态库完全不同),但通过上述工具,我们可以追踪到动态库对应的原始.o文件信息。

内容的提问来源于stack exchange,提问作者Harish Tadikamalla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:42:12