gcc 升级版本8

升级到gcc8 --编译安装

gcc镜像地址:https://mirrors.aliyun.com/gnu/gcc/

wget https://mirrors.aliyun.com/gnu/gcc/gcc-8.5.0/gcc-8.5.0.tar.gz?spm=a2c6h.25603864.0.0.3a156de2FgRJMV

tar zxvf gcc-8.5.0.tar.gz
cd gcc-8.5.0/

./contrib/download_prerequisites    
#下载依赖,等待一段时间,显示All prerequisites downloaded successfully.表示成功

./configure --prefix=/data/fairseq/gcc-8.5.0 -enable-threads=posix -disable-checking -disable-multilib  -enable-languages=c,c++
#生成Makefile文件,其中--prefix为gcc安装的路径需要更改

make -j4 	#开始编译,-j为线程数,一般可设置为20,编译时间很长
make install

设置环境变量

vim ~/.bashrc
export GCC=/data/fairseq/gcc-8.5.0
export PATH=${GCC}/bin:$PATH
export LD_LIBRARY_PATH=${GCC}/lib64:$LD_LIBRARY_PATH
export LIBRARY_PATH=${GCC}/lib:$LIBRARY_PATH
export C_INCLUDE_PATH=${GCC}/include:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=${GCC}/include:$CPLUS_INCLUDE_PATH

注意:GCC=/data/fairseq/gcc-8.5.0为gcc安装目录需要修改

使环境变量生效:

source ~/.bashrc

替换动态库

检查动态库:

strings /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.27
GLIBCXX_3.4.28
GLIBCXX_DEBUG_MESSAGE_LENGTH

的确没有 GLIBCXX_3.4.29,GCC 的动态库还是旧版本的,编译升级 GCC 时生成的新版本动态库没有替换老版本的。

执行以下命令,查找编译 GCC 时生成的新动态库:

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

输出如下:

/usr/lib64/libstdc++.so.6.0.29
/usr/lib32/libstdc++.so.6
/usr/lib32/libstdc++.so.6.0.28
/usr/local/lib64/libstdc++.so
/usr/local/lib64/libstdc++.so.6.0.29
/usr/local/lib64/libstdc++.so.6
/usr/local/lib64/libstdc++.so.6.0.29-gdb.py
...
/usr/lib/x86_64-linux-gnu/libstdc++.so.6
/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28
...

最新版本为 libstdc++.so.6.0.29,而 /usr/lib/x86_64-linux-gnu/ 路径下的版本为 6.0.28 ,这就是问题所在了。将新版本复制过去并重新链接即可。

sudo cp /usr/local/lib64/libstdc++.so.6.0.29 /lib/x86_64-linux-gnu/ # 复制新版本
cd /lib/x86_64-linux-gnu # 进入该目录
sudo rm ./libstdc++.so.6 # 删除原有的默认库的软链接
sudo mv libstdc++.so.6.0.28 ./libstdc++.so.6.0.28.backup # 保险起见,备份原文件
sudo ln -s ./libstdc++.so.6.0.29 libstdc++.so.6 # 建立新的软链接

至此,默认动态库升级完成。再次运行一下命令检查动态库:

strings /lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX

现在输出如下:

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
...
GLIBCXX_3.4.28
GLIBCXX_3.4.29
...

至此,问题就解决了,a.out 可以正常运行了。

gcc版本临时升级–便捷方法

问题提出:

虚拟机下面安装的centos7系统,默认gcc是4.8.5版本。

想升级到最新版本,但是又不想花很多时间去编译源码。有没有一种更加便捷的升级方法呢?

升级步骤:

1.安装 scl仓库

SCL(Software Collections)可以让你在同一个操作系统上安装和使用多个版本的软件,而不会影响整个系统的安装包。

sudo yum install centos-release-scl -y

centos7中安装了centos-release-scl后,之前的yum源变为不可用 解决方案,检查并修复 SCL 仓库配置

ls -l /etc/yum.repos.d/CentOS-SCLo*

cat > /etc/yum.repos.d/CentOS-SCLo-scl.repo <<'EOF'
[centos-sclo-scl]
name=CentOS-7 - SCLo scl
baseurl=https://mirrors.aliyun.com/centos/7/sclo/$basearch/sclo/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-scl-rh]
name=CentOS-7 - SCLo scl-rh
baseurl=https://mirrors.aliyun.com/centos/7/sclo/$basearch/rh/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
EOF

2.安装所需版本的GCC:

yum install devtoolset-9-gcc devtoolset-9-gcc-c++ -y

3.启用devtoolset版本的gcc:

scl enable devtoolset-9 bash			#临时生效

注意: scl enable devtoolset-11 bash命令仅是临时性的使新的gcc生效,直到会话结束。

4.验证GCC版本:

gcc --version

g++ --version
c++ --version

5.为了使新版本的GCC在重新启动后仍然保持为默认版本,你可以将启用命令添加到你的shell配置文件。编辑 ~/.bashrc 文件,添加以下行:

echo "source /opt/rh/devtoolset-9/enable" >> ~/.bashrc

保存文件并重新加载配置:

source ~/.bashrc

现在,你已成功升级到最新版本的GCC,并且它会在重新启动系统后仍然保持升级状态。这个方法使用了SCL仓库,允许你同时安装多个版本的软件,非常方便。如果你需要升级到其他版本的GCC,只需更改命令中的版本号即可。

升级到 gcc11

yum install git gcc gcc-c++ -y

# 升级 gcc
sudo yum install centos-release-scl
sudo yum install devtoolset-11-gcc devtoolset-11-gcc-c++ devtoolset-11-binutils -y

scl enable devtoolset-11 bash
echo "source /opt/rh/devtoolset-9/enable" >> ~/.bashrc   #永久生效
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值