【问题标题】:How to configure libstdc++ with GCC 4.8?如何使用 GCC 4.8 配置 libstdc++?
【发布时间】:2013-05-30 01:35:50
【问题描述】:

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

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

./main: /usr/lib/i386-linux-gnu/libstdc++.so.6: versionGLIBCXX_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)`

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

【问题讨论】:

标签: c++ gcc compiler-construction g++ libstdc++


【解决方案1】:

您需要告诉您的动态链接器(它在您运行程序时执行)在哪里可以找到该库。将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

【讨论】:

  • 完美,立即生效!我不知道为什么我不考虑查看相关的 lib 目录,而不是在 /usr/lib 中乱七八糟……事后诸葛亮总是 20/20。无论如何,再次感谢,我非常感谢您的帮助!
  • @Guillaume 那么 ld.so 是如何工作的呢?您是否只是从终端运行ld.so --library-path /app/gcc/4.8.0/lib,并且总是在系统上的任何地方为该用户神奇地使用它,就像它在LD_LIBRARY_PATH 上一样?如果是这样,为什么这比使用LD_LIBRARY_PATH 更好?
  • @DavidDoria ld.so --library-path blah 只是使用该搜索路径调用链接器。它不会更改链接器的默认配置(至少在 Linux 上如此)。如果你想改变它的默认搜索路径,你可能需要编辑 /etc/ld.so.conf 或类似的东西。 man ld.so 将为您提供所有详细信息。
猜你喜欢
  • 1970-01-01
  • 2011-01-26
  • 1970-01-01
  • 2013-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-01
相关资源
最近更新 更多