Jon*_*off 4 debugging linker gcc compilation
我有libstdc ++和libc等的调试版本,并且想链接它们。它们位于/ usr / lib / debug而不是/ usr / lib。有任何想法吗?
我相信接受的答案是误导性的图书馆/usr/lib/debug是不编译(-g -O0 ...)在库版本调试/lib,/usr/lib从相应的库剥离,而只是调试符号/lib,/usr/lib。请参阅解释,以了解如何使用libc的调试版本以及如何在GCC中链接到libc和libstdc ++的调试版本?更多细节。
语录:
中的库
/usr/lib/debug不是真正的库。而是,仅包含调试信息,但不包含.text也不包含.data真正的libc.so.6的各个部分。
和
在许多Linux安装中,调试库不包含真实代码;它们仅包含调试代码。它们仅包含调试信息。两者是分开的,因此如果不需要它们并且磁盘空间不足,则可以选择不安装它们,但是调试库本身并不好。
检查自己:
objdump -h /usr/lib/debug/lib/x86_64-linux-gnu/libc-2.19.so | grep -C1 text
11 .text 001488a3 000000000001f520 000000000001f520 000002b4 2**4
ALLOC, READONLY, CODE
Run Code Online (Sandbox Code Playgroud)
该.text段是,ALLOC但没有CONTENTS。与中的相应库进行比较/lib/x86_64-linux-gnu/libc-2.19.so:
$ objdump -h /lib/x86_64-linux-gnu/libc-2.19.so | grep -C1 text
11 .text 001488a3 000000000001f520 000000000001f520 0001f520 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
Run Code Online (Sandbox Code Playgroud)
假设Linux,
-L/usr/lib/debug到链接器命令行。gcc/ld将在默认系统目录之前查找。使用ldd命令验证是否链接了正确的库版本(仅限共享库)。LD_LIBRARY_PATH=/usr/lib/debug. 即使没有第 1 步,只要有一个库版本,您的应用程序就会从那里获取库,如果您使用发行版的包管理器进行安装,则很可能出现这种情况。不过,两者都做是个好主意,因为某些库可能只是静态形式。