联系QQ 284710375
首页 > 技术分享 > Linux
收藏

Armbian升级gcc版本2023-02-26 10:46:00

大潇博客 原创文章,转载请标明出处

本次升级所用的系统环境为Armbian5.77,对应的Debian系统为Debian 9,由于是编译安装,且安装在目前适配比较一般的ARM架构上,所以本次升级基本适用Linux各主流发行版本。

armbian5.7查看version.png


注意事项:

1、gcc编译时间非常长,如果内存充足,io较好,不妨使用make -j让cpu几个内核同时跑起来,我这次所用arm架构的cpu是晶晨s905,足足make了30个小时,也是活久见。

2、gcc占用空间比较大,下载的压缩文件仅100多M,完全编译后,占用空间6G。

gcc编译后占用空间.png

3、构建gcc版本> = 4.1.x需要gmp、mpfr、mpc的补充包,如果缺失必要的依赖,gcc在make过程中必会报错,所以我们可以先下载并构建每个支持包,然后告诉make,gcc编译期间二进制文件所在的位置。


每个gcc版本对gmp、mpfr、mpc最低版本要求也可能不同,为了兼容性更强,可以尽量选择版本较高的gmp、mpfr、mpc。

比如本次我编译安装的gcc版本是10.1.0,所有依赖的最低版本:

gmp-5.0.1

mpfr-3.1.5

mpc-1.0.1

这些版本的依赖,发行时间较早,对于arm架构不友好,可以理解为他们发行时还不流行arm架构,所以建议直接安装最新版本,我选择了:

gmp-6.2.1

mpfr-4.2.0

mpc-1.3.1

在armbian中编译安装,一次通过。 


上文所需资源可以在gnu安装包下载_开源镜像站-阿里云下载:

https://mirrors.aliyun.com/gnu/


安装gmp:

root@aml:/mnt/upan# cd gmp-6.2.1/

root@aml:/mnt/upan/gmp-6.2.1# ./configure --prefix=/usr/local/gmp-6.2.1

root@aml:/mnt/upan/gmp-6.2.1# make

root@aml:/mnt/upan/gmp-6.2.1# make install


安装mpfr:

root@aml:/mnt/upan# cd mpfr-4.2.0/

root@aml:/mnt/upan/mpfr-4.2.0# ./configure --prefix=/usr/local/mpfr-4.2.0 --with-gmp=/usr/local/gmp-6.2.1

[root@localhost mpfr-3.1.5]# make

[root@localhost mpfr-3.1.5]# make install


安装mpc:

root@aml:/mnt/upan# cd mpc-1.3.1/

root@aml:/mnt/upan/mpc-1.3.1# ./configure --prefix=/usr/local/mpc-1.3.1 --with-gmp=/usr/local/gmp-6.2.1 --with-mpfr=/usr/local/mpfr-4.2.0

root@aml:/mnt/upan/mpc-1.3.1# make

root@aml:/mnt/upan/mpc-1.3.1# make install


安装gcc:

root@aml:/mnt/upan# cd gcc-10.1.0/

root@aml:/mnt/upan/gcc-10.1.0]# mkdir build

root@aml:/mnt/upan/gcc-10.1.0]# cd build

root@aml:/mnt/upan/gcc-10.1.0]# ../configure --prefix=/usr/local/gcc-10.1.0/ --enable-checking=release --enable-languages=c,c++ --disable-multilib --with-gmp=/usr/local/gmp-6.2.1 --with-mpfr=/usr/local/mpfr-4.2.0 --with-mpc=/usr/local/mpc-1.3.1

root@aml:/mnt/upan/gcc-10.1.0]# make //时间比较长

root@aml:/mnt/upan/gcc-10.1.0]# make inistall

编译成功如图:

gcc编译成功.jpg


修改与之前gcc版本相关的名字,因为版本是6.3.0,所以改为630:

root@aml:~# mv /usr/bin/gcc /usr/bin/gcc630

root@aml:~# mv /usr/bin/g++ /usr/bin/g++630

root@aml:~# mv /usr/bin/c++ /usr/bin/c++630

root@aml:~# mv /usr/bin/cc /usr/bin/cc630


把刚才配置好的gcc链接到环境变量:

root@aml:~# ln -s /usr/local/gcc-10.1.0/bin/gcc /usr/bin/gcc

root@aml:~# ln -s /usr/local/gcc-10.1.0/bin/g++ /usr/bin/g++

root@aml:~# ln -s /usr/local/gcc-10.1.0/bin/c++ /usr/bin/c++

root@aml:~# ln -s /usr/local/gcc-10.1.0/bin/gcc /usr/bin/cc


在i386、x86等架构中,使用以下命令创建软连接:

root@aml:~# mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.bak

root@aml:~# ln -s /usr/local/gcc-10.1.0/lib64/libstdc++.so.6.0.28 /usr/lib64/libstdc++.so.6

在arm架构中,/usr/lib/目录下可能会多一层aarch64-linux-gnu,如果不确定,可以使用find命令查找libstdc++,下面是我在armbian中使用的命令:

root@aml:~# mv /usr/lib/aarch64-linux-gnu/libstdc++.so.6 /usr/lib/aarch64-linux-gnu/libstdc++.so.6.bak

root@aml:~# ln -s /usr/local/gcc-10.1.0/lib64/libstdc++.so.6.0.28 /usr/lib/aarch64-linux-gnu/libstdc++.so.6


若以上命令全部正常执行,那么恭喜,gcc升级成功。


查看gcc10.0.1占用空间,约1.1G:

gcc占用空间.png


使用gcc --version查看版本:

gcc查看版本.png


下面说可能遇到的问题:

问题多多少少会存在一些,并且每次出现问题,make终止,会浪费很多的时间。


比如:/gcc/cc1: error while loading shared libraries: libmpfr.so.6: cannot open sha...

这个在提醒缺失libmpfr.so.6文件,这是由mpfr依赖库提供的,安装完mpfr后,查看是否存在libmpfr.so.6:

ls /usr/lib/ | grep libmpfr

若提示不存在,或者报错,就需要我们来提供这个文件,比如使用find搜索libmpfr*,找到文件路径后,创建软链接:

find / -name libmpfr*  #查找libmpfr.so.6

ln -s /usr/local/mpfr-4.2.0/lib/libmpfr.so.6 /usr/lib/libmpfr.so.6  #x86架构

ln -s /usr/local/mpfr-4.2.0/lib/libmpfr.so.6 /usr/lib/aarch64-linux-gnu/libmpfr.so.6  #arm架构


现在基于Arm的设备越来越多,所以升级时一定要注意使用哪种架构的Linux,了解需求后,在选用软件版本、创建软链接等方面会少走很多弯路。

还有一点要注意的:发行较早的软件版本,不支持Arm架构。


打赏

阅读排行

大家都在搜

博客维护不易,感谢你的肯定
扫码打赏,建议金额1-10元
  • 15601023311