由于ldd
仅列出动态库,有没有办法来提取有关用于创建可执行文件的静态库的信息?
Answer 1:
ldd <exe filename>
示出了动态链接库
nm <exe filename>
示出了在该文件中的符号。
要查看哪些来自静态库中的符号需要运行nm
对这些库得到其中的符号(函数等)的名单,然后比较他们什么你从符号列表nm <exe filename>
。
你用比较列表comm
命令。 见man comm
的详细信息。
这是从这个论坛采取了这里 。
Answer 2:
没有,图书馆的名称在链接过程中丢弃。 但是,如果你的可执行文件包含调试信息(即它是用-g标志编译),你可能能够从获取信息。
Answer 3:
如果你的源代码并且不想经历这一切的代码,你可以在编译时知道哪些静态库链接生成的地图文件。
例如g++ -Xlinker -Map=a.map main.c
,检查是否有连接静态库信息的地图文件。
Answer 4:
除非给定的编译器专卖店某种元数据的二进制里,再没有。 静态库是直接编译成二进制代码。
Answer 5:
有没有办法让一些内部静态库列表ELF可执行文件。
因为对于连接器,静态库只是作为一个“懒惰”的成员集合。 因此,所产生的ELF可执行将只包含链接它所需要的成员。 所以成员像foo2.o
的libfoo.a
链接为如果对象文件foo2.o
被链接到可执行文件(提供在定义了一些符号foo2
需要,即,某处引用)。
当然,使用nm
或objdump
,或readelf
,或strings
上的一些ELF可执行文件,可以让我们有什么目标文件的一些提示(包括那些从静态库)都在里面,因为你会看到定义的符号(成员)那些(它们内部使用或文字串)静态库。
文章来源: Get list of static libraries used in an executable