麒麟V10 arm 编译安装 gcc9.3环境

👨‍🎓博主简介

  🏅优快云博客专家
  🏅云计算领域优质创作者
  🏅华为云开发者社区专家博主
  🏅阿里云开发者社区专家博主
💊交流社区:运维交流社区 欢迎大家的加入!
🐋 希望大家多多支持,我们一起进步!😄
🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏 ⭐️ 加关注+💗


在这里插入图片描述

一、前言需求:

在麒麟V10 arm64架构的服务器上需要使用到gcc9.3,但麒麟V10自带的gcc版本是7.3,麒麟系统自带的sp1和sp2源,默认的gcc版本都是7.3,所以需要升级到gcc9.3才能使用;

麒麟V10 系统默认安装的文件版本地址:http://update.cs2c.com.cn:8080/NS/V10/

二、GCC 9.3安装包下载

gcc安装包下载地址:

9.3安装包下载地址:https://ftp.gnu.org/gnu/gcc/gcc-9.3.0/gcc-9.3.0.tar.gz
其他版本安装包下载地址:http://ftp.gnu.org/gnu/gcc/

可以在服务器上使用wget下载,也可以直接下载上传到服务器上;

三、服务器操作

3.1 下载所需依赖包

# 安装gcc gcc-c++ glibc-static make
yum -y install gcc gcc-c++ glibc-static make
# 安装bzip2
yum -y install bzip2

3.2 解压 GCC 安装包

tar xf gcc-9.3.0.tar.gz

3.3 下载相关的依赖和组件

#先切换到gcc9.3的目录下
cd gcc-9.3.0
#下载相关的依赖和组件
./contrib/download_prerequisites

如果执行:./contrib/download_prerequisites此操作报错:error: Cannot download gmp-6.1.0.tar.bz2 from ftp://gcc.gnu.org/pub/gcc/infrastructure/,那么就手动下载一下(使用清华大学源手动下载):

# 下载gmp-6.1.0
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/gmp/gmp-6.1.0.tar.xz
# 解压
tar -xvf gmp-6.1.0.tar.xz
# 重命名
mv gmp-6.1.0 gmp
 
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/mpfr/mpfr-3.1.4.tar.gz
tar -xvf mpfr-3.1.4.tar.gz
mv mpfr-3.1.4 mpfr
 
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/mpc/mpc-1.0.3.tar.gz
tar -xvf mpc-1.0.3.tar.gz
mv mpc-1.0.3 mpc

3.4 新建一个build目录在gcc9.3.0目录中用于存放编译文件

mkdir build

3.5 编译、安装

#创建完文件夹之后,进入文件夹
cd build
#进入之后编译,指定目录编译安装;
../configure -prefix=/usr/local/ --enable-checking=release --enable-languages=c,c++ --disable-multilib 
#完了之后编译并安装,编译安装需要好几个小时,还请耐心等待!
make -j4 
make install

编译安装需要好几个小时,具体没有测试过,还请耐心等待!


附:编译参数说明:【参数说明来源于:https://blog.youkuaiyun.com/LG_15011399296/article/details/127634103

–prefix=/usr/local/ 指定安装路径

–enable-bootstrap 这里引用网上一些文献对该参数的解释:用第一次编译生成的程序进行第二次编译,然后用再次生成的程序进行第三次编译,并且检查比较第二次和第三次结果的正确性,也就是进行冗余的编译检查工作。 非交叉编译环境下,默认已经将该值设为 enable,可以不用显示指定;交叉编译环境下,需要显示将其值设为 disable。

–enable-checking=release 以软件发布版的标准来对编译时生成的代码进行一致性检查;设置该选项为 enable并不会改变编译器生成的二进制结果,但是会导致编译的时间增加;该选项仅支持gcc编译器; 总体而言,对于上面这个选项,机器的硬件配置较低,以及不愿等待太久编译时间的童鞋,可以设置为 disable;但是这会增加产生未预期的错误的风险,所以应该慎用。 可以同时设置 --disable-bootstrap 与 --disable-checking,这对编译过程的提速很有帮助。

–enable-threads=posix 顾名思义,启用posix标准的线程支持 ,要让程序能在符合POSIX规范的linux发布版上正确运行,就应该启用该选项,取决于宿主或目标操作系统的类型,其它可用值有:aix,dec,solaris,win32等,如果你是其它的类UNIX系统,就需要设置相应的值。

–enable-languages=c,c++ 支持的高级语言类型和运行时库,可以设置的所有语言包括 ada,c,c++,Fortran,java,objc,obj-c++,GO 等语言。这里只开启了c和c++,因为支持的语言越多,就需要安装越多的相应静态与动态库,还有五花八门的依赖库,这会让管理变得困难,体积也会变得庞大。

–disable-multilib 如果你的操作系统是32位,默认就已经设置为 disable,这意味着gcc仅能生成32位的可执行程序;如果你的操作系统是64位,默认就已经设置为 enable,这意味着用gcc编译其它源文件时可以通过 -m32 选项来决定是否生成32位机器代码。如果在64位系统上,要禁止生成32位代码, 设置 --disable-multilib。

–enable-gather-detailed-mem-stats 允许收集详细的内存使用信息,如果设置该参数为 enable,则将来编译好的gcc可执行程序,可以通过 -fmem-report 选项来输出编译其它程序时的实时内存使用情况。

–with-long-double-128 指定 long double 类型为128位(16字节!);设置为 without,则 long double类型将为64位(8字节),这将与普通的 double 类型一样。 基于 Glib 2.4以上版本编译时,默认已经是128位。


3.6 查看是否安装成功

查看gcc版本:

gcc -v

如果显示还是7.3的话,那就需要手动软连接一下gcc版本;

# 可以find先查一下xgcc
[root@e2cdbc5ea620 build]# find / -name xgcc
/usr/local/gcc-9.3.0/build/prev-gcc/xgcc
/usr/local/gcc-9.3.0/build/stage1-gcc/xgcc
/usr/local/gcc-9.3.0/build/gcc/xgcc

# 可以看到有一个xgcc是在build下的gcc下的,将这个软连接到/bin下就行了
mv /bin/gcc /bin/gcc.bak 
ln -s /usr/local/gcc-9.3.0/build/gcc/xgcc /bin/gcc

完成软连接之后就再次gcc --version、或者gcc -v查看版本就行,这时候就会显示9.3了。

在这里插入图片描述

  • 查看gcc9.3的动态库
strings /lib64/libstdc++.so.6 | grep GLIBC

在这里插入图片描述

发现动态库还是7.3的,这时候也需要手动去软连接一下库;

# 查一下所有libstdc++.so.6的库,看看最新的是哪个
[root@e2cdbc5ea620 build]# find / -name libstdc++.so.6.*
/usr/lib64/libstdc++.so.6.0.24
/usr/local/gcc-9.3.0/build/stage1-aarch64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.28
/usr/local/gcc-9.3.0/build/aarch64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.28
/usr/local/gcc-9.3.0/build/prev-aarch64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.28

# 可以看到都在编译的路径下[三选一就行],也是先备份,在软连接到/lib64下
mv /lib64/libstdc++.so.6 /lib64/libstdc++.so.6-7.3
ln -s /usr/local/gcc-9.3.0/build/stage1-aarch64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.28 /lib64/libstdc++.so.6

# 软连接完成之后在查一下动态库
strings /lib64/libstdc++.so.6 | grep GLIBC

可以看到有GLIBCXX_3.4.28就算是成功了;

在这里插入图片描述

3.7 安装成功

四、参考文献

参考文章标题参考文章链接🔗
麒麟V10编译安装GCC9.3https://blog.youkuaiyun.com/LG_15011399296/article/details/127634103

五、相关文章

文章标题文章链接🔗
Linux中gcc4.8.5升级到gcc5.4.0用已经编译好的安装包升级(重点是不用编译安装,可以更省时)https://blog.youkuaiyun.com/liu_chen_yang/article/details/123735242
Centos7 gcc4.8.5升级到版本gcc5.4.0https://blog.youkuaiyun.com/liu_chen_yang/article/details/123711779
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A-刘晨阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值