得到一个可执行使用的静态库列表(Get list of static libraries used

2019-06-25 20:44发布

由于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.olibfoo.a链接为如果对象文件foo2.o被链接到可执行文件(提供在定义了一些符号foo2需要,即,某处引用)。

当然,使用nmobjdump ,或readelf ,或strings上的一些ELF可执行文件,可以让我们有什么目标文件的一些提示(包括那些从静态库)都在里面,因为你会看到定义的符号(成员)那些(它们内部使用或文字串)静态库。



文章来源: Get list of static libraries used in an executable