找不到GLIBCXX_3.4.9

时间:2009-12-23 11:08:48

标签: gcc glibc libstdc++

我遇到有关libstdc++.so的问题。

我安装了新版本的gcc并尝试编译C ++代码。编译工作,但当我尝试执行二进制文件(m5.opt是它的名字)时,我遇到以下错误:

build/ALPHA_SE/m5.opt: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by build/ALPHA_SE/m5.opt).

我需要替换libstdc++.so吗?如果是这样,我在哪里可以下载我想要的版本?在GCC网站上,他们说libstdc ++现在是gcc的一部分。

详细

GCC: 我之前有过gcc 4.1.2,但是我下载了gcc 4.2.4。从我执行的非常规gcc目录./configure;使; sudo make install`。 当我尝试使用gcc或g ++进行编译时,它的默认版本仍为4.1.2。为了解决这个问题,我更换了一些链接:

mv /usr/bin/gcc /usr/bin/gcc_bak
ln -s /usr/local/bin/gcc gcc
mv /usr/bin/g++ /usr/bin/g++_bak
ln -s /usr/local/bin/g++ g++

GLIBC(++) - libstdc ++:

/usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.8
/usr/local/lib/libstdc++.so -> libstdc++.so.6.0.9
/lib/libc.so.6 -> libc-2.5.so -> libc-2.5.so

的Linux版本: uname -a给出:

Linux madmax 2.6.18-128.4.1.el5 #1 SMP Tue Aug 4 12:51:10 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux

3 个答案:

答案 0 :(得分:26)

问题是你错误地构建了新的GCC:在Linux上你应该使用

./configure --prefix=/usr

默认安装前缀为/usr/local,这就是make installgccg++二进制文件放入/usr/local/bin等的原因。

现在发生的事情是您使用新的(符号链接的)GCC 4.2.4进行编译和链接,但在运行时,您的程序绑定到旧的/usr/lib64/libstdc++.so.6(版本6.0.8,而不是必需的6.0) 0.9)。您可以通过运行ldd build/ALPHA_SE/m5.opt来确认:您应该看到它使用/usr/lib64/libstdc++.so.6

您可以执行多项修复。

env LD_LIBRARY_PATH=/usr/local/lib64 ldd build/ALPHA_SE/m5.opt

应该向您显示设置LD_LIBRARY_PATH足以将二进制文件重定向到正确的库,

LD_LIBRARY_PATH=/usr/local/lib64 build/ALPHA_SE/m5.opt

应该跑。您可以通过使用-Wl,-rpath=/usr/local/lib64重新链接将此路径“烘焙”到m5.opt二进制文件中。

更持久的解决方案是修复库,就像修复二进制文件一样:

cd /usr/lib64 && mv libstdc++.so.6 libstdc++.so.6_bak &&
ln -s /usr/local/lib64/libstdc++.so.6 .

更好的解决方案是使用GCC重新配置新--prefix=/usr,然后make all install

答案 1 :(得分:8)

我知道这是一个非常古老的问题,但是......

替换系统编译器(即/usr中的编译器)通常不是一个好主意,因为整个系统将使用它构建并依赖于它。

通常最好将新编译器安装到一个单独的位置,然后在手册中查看libstdc ++ FAQ How do I insure that the dynamically linked library will be found?Finding Dynamic or Shared Libraries,了解如何确保正确的libstdc ++。所以在运行时找到。< / p>

答案 2 :(得分:5)

这里的其他答案应该没问题,但是如果碰巧将gcc安装到/ usr / local /,那么'快速简便'的解决方案就是将新的库添加到LD_LIBRARY_PATH

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib64

您还可以使用

检查是否安装了正确版本的GLIBC
strings /usr/lib/libstdc++.so.6 | grep GLIBC
strings /usr/local/lib64/libstdc++.so.18 | grep GLIBC

我从另一个论坛得到了这个最后的提示,所以应该归功于应得的信用额度!