2013-05-30 43 views
9

后来,我决定升级到GCC 4.8以获得一些C++ 11功能的早期入门。然而,我还是有一点偏差,直到几天前一个项目才开始使用任何新功能(新编译器似乎一直工作正常,但这可能只是因为我没有使用任何新的功能)。如何使用GCC 4.8配置libstdC++?

在这个新项目中,当我用= std = C++ 11标志编译时,我没有任何问题。然而,在运行时,我得到的错误:

./main: /usr/lib/i386-linux-gnu/libstdc++.so.6: version GLIBCXX_3.4.18' not found (required by ./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' not found (required by ./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)`

我不知道究竟是怎么回事了错了,我会继续的谷歌搜索,并四处寻找答案,但你们可以提供任何帮助,将不胜感激。如果对此问题有任何不清楚的地方,或者我忘记了一些信息,请让我知道,我会尽力将其添加进去。非常感谢!

+0

[Linking g ++ 4.8 to libstdC++](http://stackoverflow.com/questions/17220872/linking-g-4-8-to-libstdc) –

回答

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(如果您使用的是类似Bourne的shell,它在Linux上是默认的)。

然后尝试运行您的程序。

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

+0

完美,立即工作!我不知道为什么我没有想到在相关的lib目录中查看,而不是在/ usr/lib中查找......后视镜始终是20/20。无论如何,再次感谢,我非常感谢帮助! – paul

+0

http://stackoverflow.com/questions/17220872/linking-g-4-8-to-libstdc –

+0

@Guillaume那么ld.so如何工作?你是否只是从终端运行'ld.so --library-path/app/gcc/4.8.0/lib',并且它总是神奇地用于该用户系统上的任何地方,就像它在'LD_LIBRARY_PATH' ?如果是这样,为什么比使用'LD_LIBRARY_PATH'更好? –

相关问题