我尝试使用gdb调试程序,在运行命令之后我得到错误(在gdb内)
/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found
我确保LD_LIBRARY_PATH已设置,即set env LD_LIBRARY_PATH
,因为它位于调用shell中,如果启动该程序,则不会出现此错误消息。
这个错误是由于没有安装libc ++的调试版本吗?
答案 0 :(得分:1)
此错误是由于未安装libc ++的调试版本
造成的
没有
您没有使用libc++
,而是使用libstdc++
,这完全不同。该问题与libstdc++
的调试版本无关。
问题是双重的:
LD_LIBRARY_PATH
~/.bashrc
或~/.cshrc
或~/.zshrc
重置 LD_LIBRARY_PATH
。这可以防止GDB运行您的二进制文件,因为gdb run
命令实际上$SHELL /path/to/binary <args>
,并且由于您的shell重置LD_LIBRARY_PATH
,所以当二进制文件运行时,LD_LIBRARY_PATH
已经不正确通常最好构建二进制文件,使其首先不需要设置LD_LIBRARY_PATH
。这是通过将-Wl,-rpath=/path/to/directory-containing-correct-libstdc++.so.6
添加到您的链接行来实现的。
这解决了问题#1,并允许您使用GDB调试二进制文件。
您还应该更改~/.bashrc
,以便它不会对非交互式shell执行任何操作。这个document展示了如何实现这一目标。