如何使用GCC 4.8配置libstdc ++?

时间:2013-05-30 01:35:50

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

前段时间,我决定升级到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)`

我不确定这到底出了什么问题,我将继续谷歌搜索并寻找答案,但是你们提供的任何帮助都将不胜感激。如果对此问题有任何不清楚或者我忘记了一些信息,请告诉我,我会尝试将其添加进去。非常感谢!

1 个答案:

答案 0 :(得分: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上的默认shell)。

然后尝试运行您的程序。

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