源码编译gcc实录

当遇到编译时libstdc++.so.6版本不匹配的问题,可以通过手动升级GCC来解决。首先从镜像站下载gmp、mpfr、mpc和gcc的软件包,按照gmp→mpfr→mpc的顺序编译安装。然后配置ld.so.conf.d文件,更新动态链接库,并编译安装gcc。最后,通过软连接将新的libstdc++.so.6覆盖到/usr/lib64/下,并检查CXXABI和GLIBCXX版本。

0.前言

有时候,我们在编译某些软件是时候会出现解决/usr/lib64/libstdc++.so.6: version `CXXABI_x.x.x’ not found的问题,libstdc++.so.6是gcc下面的一个库;亦或者要求高版本的gcc;可以通过手动升级gcc版本解决此类问题。

1.下载软件包

本文中的所有软件包均可以在https://mirrors.ustc.edu.cn/gnu/下载

gcc 依赖 gmp,mpfr,mpc,所以要先安装这几个,

下载软件包(进入后选择您需要的版本):

gmp:https://mirrors.ustc.edu.cn/gnu/gmp/

mpfr:https://mirrors.ustc.edu.cn/gnu/mpfr/

mpc:https://mirrors.ustc.edu.cn/gnu/mpc/

gcc:https://mirrors.ustc.edu.cn/gnu/gcc/

这里gcc选择5.5.0版本的包gcc-10.4.0.tar.xz;gmp选择6.2.1包gmp-6.2.1.tar.xz;mpfr选择4.1.0版本mpfr-4.1.0.tar.gz;mpc选择1.2.1版本mpc-1.2.1.tar.gz

2.编译依赖

需要按照先编译gmp,再编译mpfr,最后编译mpc的顺序

tar -Jxvf gmp-6.2.1.tar.xz 
cd ../gmp-6.2.1
./configure --prefix=/usr/local/gmp
make && make install
tar -zxvf mpfr-4.1.0.tar.gz 
cd ../mpfr-4.1.0
./configure --prefix=/usr/local/mpfr --with-gmp=/usr/local/gmp/
make && make install
tar -zxvf mpc-1.2.1.tar.gz
cd ../mpc-1.2.1
./configure --prefix=/usr/local/mpc --with-gmp=/usr/local/gmp/ --with-mpfr=/usr/local/mpfr/
make && make install

编辑 vim /etc/ld.so.conf.d/gccrely.conf文件(vim会自动创建gccrely.conf文件,文件名可随便写),写入以下内容

/usr/local/mpc/lib
/usr/local/mpfr/lib
/usr/local/gmp/lib

完毕后 执行

ldconfig -v

3.编译gcc

解压gcc源码包:

tar -Jxvf gcc-10.4.0.tar.xz
cd gcc-10.4.0

执行预编译:

./configure --prefix=/usr/local/gcc10 \
--with-gmp=/usr/local/gmp/ \
--with-mpfr=/usr/local/mpfr/ \
--with-mpc=/usr/local/mpc/ \
--enable-languages=c,c++ \
--with-system-zlib \
--enable-multilib

其中configure的参数有很多,可以使用./configure --help查看
编译(-j8 是启用8个线程编译,加快编译速度):

make -j8

安装:

make install

4.附

覆盖默认的libstdc++.so.6:

ln -sf /usr/local/gcc10/lib64/libstdc++.so.so.6.0.28 /usr/lib64/libstdc++.so.6

查看CXXABI版本命令:

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

查看GLIBCXX版本命令:

strings /lib64/libstdc++.so.6 |grep GLIBCXX
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值