c++ - 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 的代码上使用哪些东西?我可以强制编译器以某种方式使用该库的旧版本或在二进制文件中包含该特定库吗?(如果我没有所需的库,我不明白为什么它会在目录中工作)
提前感谢,如果我的问题很愚蠢或没有意义,我很抱歉,因为我说我对这一切都很陌生。
解决方案
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
推荐阅读
- python - Python ZMQ 函数神奇地消失了?
- oracle - 配置助手 (biee.py) 在 OBIEE12c 处以退出值 1 失败
- flutter - 如何删除 Dart 编程语言中的嵌套键
- javascript - 如何在 discord.js (v13) 中为 Bot 代码块使用语法高亮显示?
- python-3.x - 基数为 10 的 int() 的无效文字:'1.0'
- variables - 如何在单产品和可变产品之间调整代码
- cpanel - 域自动重定向到另一个意外域
- mysql - 缓存 MySQL 中排序所需的聚合?
- r - 如何对 Shiny 的 ObserveEvent 中执行的所有计算使用“withProgress”?
- c# - 如果没有给定 x:Key,样式设置器将无法工作