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

C++ 从.so/.o文件获取c/cpp中的静态库列表,c++,c,linux,binary,linker,C++,C,Linux,Binary,Linker,我一直试图从文件中获取静态和动态依赖项。我有源代码和未剥离的bin文件, 为了获得所有的动态依赖关系,我使用了这一行及其 readelf -d $1 | grep "NEEDED\|RPATH" | perl -pe 's/.*\[(.*)\]/$1/ 我的问题是静态库,当我使用命令时: nm路径/to/so 我得到的是函数名,而不是文件名。 有没有办法查看每个二进制文件的静态依赖项?动态库(.so)不能有“静态依赖项”,因为它们已经链接 对象文件(.o)和静态库(.a)定义它们导出(供他人

我一直试图从文件中获取静态和动态依赖项。我有源代码和未剥离的bin文件, 为了获得所有的动态依赖关系,我使用了这一行及其

readelf -d $1 | grep "NEEDED\|RPATH" | perl  -pe 's/.*\[(.*)\]/$1/
我的问题是静态库,当我使用命令时:

nm路径/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
关键字标记未定义的符号,即对象文件的静态依赖项。

据我所知,答案是:不。静态库只是对象文件的存档。链接静态库与链接不同的对象文件是一样的。也许可以找到某种方法,我现在的脚本是:“readelf-d$1 | grep”NEEDED\|RPATH”| perl-pe的s/*[(.*)]/$1/'| sort-u | tee DynamicDep_$2\.txt”,用于动态和“strings-a$1 | grep-E'\.h'| sort-u | sed”s、\x1B[[0-9;]*[a-zA-Z]、g“| tee StaticDep|u$2\.txt”表示静态