链接器选项列出使用的库

我正在开发一个Linux平台并使用GNU C ++编译器。 我想解决一个链接错误,说一些符号是未定义的。 我可以使用命令行提供的名称查找库,并查看它们是否包含有问题的符号(使用'nm'实用程序)。

我知道在编译步骤中,我可以使用命令行标志'-H'而不是'-c'来获取#include到编译中的头文件列表。 链接器是否有类似的选项? 我想如果我能看到链接器用来处理每个'-lmylibrary'标志的文件列表,我可以进一步排除故障。


如果你得到一个未定义的符号错误,这意味着你忘记了链接某个库,知道你链接的库可能不会像你想象的那样有用,因为显然这些库中没有符号,但是你可以使用-print-file-name=library选项来找出gcc将用来链接库的路径,例如:

$ gcc -print-file-name=libc.a
/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/../../../libc.a

还传递 - --trace链接器显示类似的输出

gcc -Wl,--trace myprog.c -o myprog -L. -lmylib
-lmylib (./libmylib.a)
-lgcc_s (/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/libgcc_s.so)
....

(注意在上面的--trace是链接器的一个参数,所以它进入-Wl 。为链接调用的gcc不会发出任何有用的--trace作为gcc自身的参数)。

在成功构建程序以找出使用哪个动态链接库之后,您还可以使用ldd ,其输出如下所示:

ldd `which ls`
linux-vdso.so.1 =>  (0x00007fff7ffff000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f2e8ea93000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f2e8e88b000)
libacl.so.1 => /lib/x86_64-linux-gnu/libacl.so.1 (0x00007f2e8e682000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2e8e2ee000)
....
链接地址: http://www.djcxy.com/p/53303.html

上一篇: linker option to list libraries used

下一篇: How to keep a specific symbol in binary file?