C++ 从.so/.o文件获取c/cpp中的静态库列表
我一直试图从文件中获取静态和动态依赖项。我有源代码和未剥离的bin文件, 为了获得所有的动态依赖关系,我使用了这一行及其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)定义它们导出(供他人
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”表示静态