不久前,我决定升级到 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: version
GLIBCXX_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)`
我不确定这是哪里出了问题,我会继续谷歌搜索并四处寻找答案,但你们可以提供的任何帮助将不胜感激。如果有任何不清楚的问题或我忘记了一些信息,请告诉我,我会尝试添加。非常感谢!