首页 文章

从gdb中找不到GLIBCXX

提问于
浏览
0

我尝试用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 回答

  • 1

    是否由于未安装libc的调试版本而导致此错误

    没有 .

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

    问题是双重的:

    • 您正在使用比系统上安装的更新版本的GCC构建二进制文件,这需要您设置 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展示了如何实现这一目标 .

相关问题