我有libstdc ++和libc等调试版本,并希望链接它们。它们位于/ usr / lib / debug而不是/ usr / lib。有什么想法吗?
答案 0 :(得分:5)
我认为接受的答案会产生误导,因为/usr/lib/debug
中的库不是/lib
,/usr/lib
中的调试编译(-g -O0 ...)版本的库,但是只需调试/lib
,/usr/lib
中相应库中剥离的符号。请参阅How to use debug version of libc的已接受答案以及How to link against debug versions of libc and libstdc++ in GCC?更多详细信息的说明。
行情:
/usr/lib/debug
中的库不是真正的库。相反,仅包含调试信息,但不包含真实libc.so.6的.text
或.data
部分
和
在许多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
.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
答案 1 :(得分:3)
假设Linux,
-L/usr/lib/debug
。 gcc
/ ld
将在默认系统目录之前查看。使用ldd
命令验证是否链接了正确的库版本(仅限共享库)。LD_LIBRARY_PATH=usr/lib/debug
,即使没有第1步,您的应用程序也会从那里获取库,只要有一个库的版本,如果您使用发行版的软件包管理器安装它很可能答案 2 :(得分:-1)
使用链接器标志。 ld / gcc -L<LIBRARY_PATH>
对于链接时间非常重要,无论是共享还是静态,如果链接器无法找到它,则无法链接到库。
对于共享库,环境变量LD_LIBRARY_PATH
对于启动时间非常重要。当您启动应用程序时,动态库加载程序 ld.so 和 ld-linux.so 将在那里查找。