找不到GLIBCXX_3.4.9

我有一个关于libstdc .so的问题 .

我安装了新版本的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 .so吗?如果是这样,我在哪里可以下载我想要的版本?在海湾合作委员会网站上,他们说libstdc现在是gcc的一部分 .

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

马克斯

详情

GCC:
我之前有过gcc 4.1.2,但是我下载了gcc 4.2.4 . 从未执行的gcc目录我执行了"./configure"; "make"; "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)

2 years ago

问题是你错误地构建了新的 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.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 重新链接它来将此路径"bake"转换为m5.opt二进制文件 .

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

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

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

2 years ago

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

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

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

2 years ago

这里的其他答案应该没问题,但如果碰巧将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

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