9

不久前,我决定升级到 GCC 4.8,以便尽早开始使用一些 c++11 功能。不过,我有点走神了,直到几天前的一个项目才真正使用任何新功能(新编译器似乎工作正常,但这可能只是因为我没有使用任何新功能。)

在这个新项目中,当我使用 =std=c++11 标志编译时,我没有遇到任何问题。但是,在运行时,我收到错误:

./main: /usr/lib/i386-linux-gnu/libstdc++.so.6: version未找到 GLIBCXX_3.4.18'(./main 要求)`

我认为链接到与 GCC 4.8 相关的更现代的 libstdc++ 库时存在问题,但我无法终生弄清楚如何解决此问题或适当的库应该在哪里。我记得将 g++ 和 gcc 二进制文件符号链接到 gcc-4.8,这似乎正在工作,因为g++ -v返回:

Using built-in specs. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/app/gcc/4.8.0/libexec/gcc/i686-pc-linux-gnu/4.8.0/lto-wrapper Target: i686-pc-linux-gnu Configured with: ./gcc-4.8.0/configure --prefix=/app/gcc/4.8.0 Thread model: posix gcc version 4.8.0 (GCC)

另一个在线线程让我查看ldd了程序的输出,它确实告诉我链接到的 libstdc++ 库的目录结构与二进制文件的目录结构不同。但是,我无法在后者中找到合适的libstdc++库,所以我不确定去哪里找。的输出ldd main是:

./main: /usr/lib/i386-linux-gnu/libstdc++.so.6: versionGLIBCXX_3.4.18' 未找到(./main 要求)linux-gate.so.1 => (0xb7791000) libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb768e000 ) libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb7662000) libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb7644000) libc .so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb749b000) /lib/ld-linux.so.2 (0xb7792000)`

我不确定这是哪里出了问题,我会继续谷歌搜索并四处寻找答案,但你们可以提供的任何帮助将不胜感激。如果有任何不清楚的问题或我忘记了一些信息,请告诉我,我会尝试添加。非常感谢!

4

1 回答 1

13

您需要告诉您的动态链接器(它在您运行程序时执行)在哪里可以找到库。设置LD_LIBRARY_PATH为库的路径(可能在某处/app/gcc/4.8.0/lib或某处)。

使用find /app/gcc/4.8.0 -name "libstdc++.so.6". 将目录添加到您的 LD_LIBRARY_PATH。例如,我提到的路径:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/app/gcc/4.8.0/lib(如果您使用的是 Linux 上默认的类似 bourne 的 shell)。

然后尝试运行您的程序。

如果可行,您可能希望将动态链接器配置为在不使用 LD_LIBRARY_PATH 的情况下查看目录。man ld.so有关如何配置路径的详细信息,请参阅。

于 2013-05-30T01:47:25.300 回答