我知道这篇文章,但它对我似乎不起作用。
关于设置,取一个简单的C++程序hw.cpp,代码如下:int main() { }
在Linux上使用g++ -o hw hw.cpp -O0 -g
编译后,运行ldd ./hw
会得到:
linux-gate.so.1 => (0x003e5000)
libstdc++.so.6 => /usr/local/lib/libstdc++.so.6 (0x007c5000)
libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0x006a4000)
libgcc_s.so.1 => /usr/local/lib/libgcc_s.so.1 (0x00a40000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x00a93000)
/lib/ld-linux.so.2 (0x00a0f000)
现在我似乎也有了/usr/lib/debug/lib/tls/i686/cmov/
中的调试库,我想这些应该是系统库的相应调试版本。
问题:如何编译我的程序,使其链接到标准C和/或C++库的调试构建,包括共享库或静态库?对于共享构建,我希望ldd ./hw
的输出指向调试目录。
(背景:我的项目使用的其中一个共享库被Valgrind报告为泄漏(“仍然可访问”),但原因不在共享库本身,而在于dlopen类型的代码中(请参阅此处)。所以我认为,如果我可以步入CRT中的_Start()
调用,就可能能够追踪罪犯。)
更新/更正:我想我只是非常、非常愚蠢——调试库可能一直以来都按照预期链接了。我被调试器在跟踪时没有显示任何内容所困惑,这是因为我没有库的源代码。
更新II:好的,请忽略之前的更新。我现在有了库源代码,但虽然标准库附带调试符号,但我似乎没有单独的调试版本。是否有这样的构建可用,如何链接?