找不到GLIBCXX_3.4.9

Max*_*ien 22 gcc glibc libstdc++

我有一个关于libstdc ++的问题.所以.

我安装了新版本的gcc并尝试编译c ++代码.编译工作,但当我尝试执行二进制文件(m5.opt是它的名字)时,我遇到以下错误:build/ALPHA_SE/m5.opt:/usr/lib64/libstdc++.so.6:version`GLIBCXX_3找不到.4.9'(build/ALPHA_SE/m5.opt要求).

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

我希望有人可以帮助我!我现在只在Linux上工作了4个月,所以对我来说一切都很新.

马克斯

细节

海湾合作委员会:
我之前有过gcc 4.1.2,但是我下载了gcc 4.2.4.从untarred gcc-directory我执行"./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

Emp*_*ian 26

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

./configure --prefix=/usr
Run Code Online (Sandbox Code Playgroud)

默认的安装前缀是/usr/local,这就是make installput gccg++二进制文件的原因/usr/local/bin,等等.

你现在发生的事情是使用new(符号链接)编译和链接GCC 4.2.4,但在运行时你的程序绑定到旧/usr/lib64/libstdc++.so.6版本(版本6.0.8,而不是必需的6.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
Run Code Online (Sandbox Code Playgroud)

应该告诉你设置LD_LIBRARY_PATH足以将二进制文件重定向到正确的库,并且

LD_LIBRARY_PATH=/usr/local/lib64 build/ALPHA_SE/m5.opt
Run Code Online (Sandbox Code Playgroud)

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

更永久的解决方案是以修复二进制文件的方式修复库:

cd /usr/lib64 && mv libstdc++.so.6 libstdc++.so.6_bak &&
ln -s /usr/local/lib64/libstdc++.so.6 .
Run Code Online (Sandbox Code Playgroud)

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


Jon*_*ely 8

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

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

通常最好将新编译器安装到一个单独的位置,然后查看libstdc ++ FAQ 如何确保找到动态链接的库?并在手册中查找动态或共享库,以了解如何确保正确的libstdc ++.所以在运行时可以找到.


Col*_*n D 5

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

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib64
Run Code Online (Sandbox Code Playgroud)

您还可以检查是否安装了正确版本的GLIBC

strings /usr/lib/libstdc++.so.6 | grep GLIBC
strings /usr/local/lib64/libstdc++.so.18 | grep GLIBC
Run Code Online (Sandbox Code Playgroud)

我从另一个论坛得到了这个最后一个提示,因此应该归功于应得的信