首页 > 解决方案 > libstdc++.so.6:未找到版本 GLIBCXX_3.4.20

问题描述

首先,要知道我对 c++ 和 Ubuntu 很陌生。

我有一个程序,我正在尝试使用 GCC(我的版本是 gcc 4.8.4)通过使用 makefile 进行编译。问题是可执行文件是在它工作的目录下创建的,但是当它复制到任何其他目录时(甚至被迫在makefile上创建)它会说。

/usr/lib/i386-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.20' not found 

此外,当我检查带有字符串 /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | 的版本时 grep GLIBCXX,我得到:

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_DEBUG_MESSAGE_LENGTH

据我一直在互联网上阅读,问题是 GLIBCXX_3.4.20 仅在我使用 4.8.4 时受 gcc 4.9 及更高版本支持,但我仍然不明白为什么它会在特定目录中工作并且不在别人身上。

gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.4) 

由于我没有更新 gcc 的权限,我想知道我能做些什么来解决这个问题......我应该避免在需要 GLIBCXX_3.4.20 的代码上使用哪些东西?我可以强制编译器以某种方式使用该库的旧版本或在二进制文件中包含该特定库吗?(如果我没有所需的库,我不明白为什么它会在目录中工作)

提前感谢,如果我的问题很愚蠢或没有意义,我很抱歉,因为我说我对这一切都很陌生。

标签: c++gccversionstdglibc

解决方案


wget https://ftp.gnu.org/gnu/gcc/gcc-10.2.0/gcc-10.2.0.tar.xz

tar xvf gcc-10.2.0.tar.gz
cd gcc-10.2.0
mkdir -p /mnt/distvol/opt/gcc/10.2.0
./configure --with-system-zlib --disable-multilib --enable-languages=c,c++ --prefix=/mnt/distvol/opt/gcc/10.2.0
make -j 2
make install
ln -s /mnt/distvol/opt/gcc/10.2.0/bin/* /usr/bin/ -f
mv /usr/bin/lib64/libstdc++.so.6 /usr/bin/lib64/libstdc++.so.6.bak
strings $(find /mnt/distvol/opt/gcc/10.2.0/ -name "libstdc++.so.6") | grep GLIBCXX_3.4.
ln -s /mnt/distvol/opt/gcc/10.2.0/lib64/libstdc++.so.6 /usr/bin/lib64/libstdc++.so.6

推荐阅读