从 .so/.o 文件中获取 C/cpp 中的静态库列表

get list of static libraries in c/cpp from .so/.o files

本文关键字:静态 列表 cpp 获取 so 文件      更新时间:2023-10-16

我一直在尝试从文件中获取静态和动态依赖项。我有源代码和未绑定的 bin 文件, 为了获得所有动态依赖项,我使用了这一行及其工作

readelf -d $1 | grep "NEEDED|RPATH" | perl  -pe 's/.*[(.*)]/$1/

当我使用以下命令时,我的问题出在静态库上:

nm path/to/so

我正在获取函数的名称而不是文件。 有没有办法查看每个二进制文件的静态依赖项?

动态库 (.so( 不能具有"静态依赖项",因为它们已经链接。

对象文件 (.o( 和静态库 (.a( 定义它们导出的符号(供其他人使用(和它们自己使用的符号。

您可以使用nm命令列出对象文件的符号。例如:

$ nm lukas.o
U __cxa_atexit
U __dso_handle
0000000000000000 V DW.ref.__gxx_personality_v0
U _GLOBAL_OFFSET_TABLE_
00000000000003a8 t _GLOBAL__sub_I__Z15double_from_strRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
U __gxx_personality_v0
00000000000001d5 T main
U __stack_chk_fail
U _Unwind_Resume

U关键字标记未定义的符号,即对象文件的静态依赖项