从gdb中找不到GLIBCXX

时间:2014-11-25 22:03:08

标签: c++ linux gdb

我尝试使用gdb调试程序,在运行命令之后我得到错误(在gdb内)

/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found

我确保LD_LIBRARY_PATH已设置,即set env LD_LIBRARY_PATH,因为它位于调用shell中,如果启动该程序,则不会出现此错误消息。

这个错误是由于没有安装libc ++的调试版本吗?

1 个答案:

答案 0 :(得分:1)

  

此错误是由于未安装libc ++的调试版本

造成的

没有

您没有使用libc++,而是使用libstdc++,这完全不同。该问题与libstdc++的调试版本无关。

问题是双重的:

  1. 您正在使用比系统上安装的更新版本的GCC构建二进制文件,这需要您设置LD_LIBRARY_PATH
  2. 您有~/.bashrc~/.cshrc~/.zshrc 重置 LD_LIBRARY_PATH。这可以防止GDB运行您的二进制文件,因为gdb run命令实际上$SHELL /path/to/binary <args>,并且由于您的shell重置LD_LIBRARY_PATH,所以当二进制文件运行时,LD_LIBRARY_PATH已经不正确
  3. 通常最好构建二进制文件,使其首先不需要设置LD_LIBRARY_PATH。这是通过将-Wl,-rpath=/path/to/directory-containing-correct-libstdc++.so.6添加到您的链接行来实现的。

    这解决了问题#1,并允许您使用GDB调试二进制文件。

    您还应该更改~/.bashrc,以便它不会对非交互式shell执行任何操作。这个document展示了如何实现这一目标。