升级gcc版本到10

文章讲述了在CentOS系统中,由于默认GCC版本过低,作者下载GCC10源码进行编译安装。在使用新GCC编译时遇到关于__cxa_throw_bad_array_new_length和std::__cxx11::basic_string::compare的未定义引用问题。解决方法是找到合适的libstdc++库,将其链接到/usr/lib64,从而修复了编译错误。
摘要由CSDN通过智能技术生成

gcc10支持协程了,准备一下环境试验一下相应的功能

centos自带的gcc版本较低,直接下载gcc源码编译安装

下载gcc

https://ftp.gnu.org/gnu/gcc/gcc-10.3.0/

解压后执行目录中的脚本

./contrib/download_prerequisites

在源码目录同级创建编译目录

mkdir gcc-build-10.3

cd gcc-build-10.3

config/make三步曲

../gcc-10.3.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib

make

make install

gcc编译安装完成

用新的gcc编译出现报错

对‘__cxa_throw_bad_array_new_length@CXXABI_1.3.8’未定义的引用

std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::compare(char const*) const@GLIBCXX_3.4.21’未定义的引用

对应的libstdc++链接需要更改

先看下现有的

strings /lib64/libstdc++.so.6 | grep GLIBCXX_3.4.21

strings /lib64/libstdc++.so.6 | grep CXXABI

在笔者的centos上 /lib64是个链接 实际是指出 /usr/lib64

找出所有的libstdc++

find / -name "libstdc++.so*"

笔者的是在这个位置 /usr/local/lib64/libstdc++.so.6.0.28 将此文件拷出 /usr/lib64

删除软链接,链接到新生成的 libstdc++.so.6.0.28

/usr/lib64/libstdc++.so.6

ln -s libstdc++.so.6.0.28 libstdc++.so.6

即可解决类似的问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值