ldd
仅列出动态库,那么是否有方法提取用于创建可执行文件的静态库信息?
ldd <exe文件名>
显示动态链接库。
nm <exe文件名>
显示文件中的符号。
要查看哪些符号来自静态库,需要对这些库运行 nm
以获取其中的符号(函数等)列表,然后将它们与您从 nm <exe文件名>
得到的符号列表进行比较。
您可以使用 comm
命令来比较列表。有关详细信息,请参见 man comm
。
这段内容摘自这里的论坛帖子。
不,库的名称在链接过程中被丢弃了。但是,如果您的可执行文件包含调试信息(即使用-g标志编译),则可以从中获取信息。
g++ -Xlinker -Map=a.map main.c
,检查映射文件以获取链接的静态库信息。请注意保留HTML标记。无法获取某个ELF可执行文件中静态库列表。
对于链接器而言,静态库只是一组“惰性”的成员。因此生成的 ELF 可执行文件将仅包含用于链接它的成员。因此,类似libfoo.a
的foo2.o
成员会被链接,就好像对象文件foo2.o
被链接到可执行文件中一样(如果需要在某处引用foo2
中定义的符号,则提供该符号)。
当然,在一些 ELF 文件上使用命令nm
、objdump
、readelf
或strings
可能会提供一些关于其中包含哪些对象文件(包括来自静态库的对象文件)的提示,因为您会看到那些静态库(或其中使用的文本字符串)中定义的符号。