• 欢迎来到本博客,希望可以y一起学习与分享

ARM centos7 升级gcc

笔记 benz 2年前 (2019-11-28) 40次浏览 0个评论 扫描二维码
文章目录[隐藏]

前言

我的系统信息如下:

CentOS Linux release 7.6.1810 (AltArch) [running via Linux Deploy]

gcc版本最新是4.8.5

由于安装nodejs-12.13.1的Linux 二进制文件 (ARM)报错:
/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.20′ not found
在确保gcc已经是最新版本了,那么再确认下目前/usr/lib目录下的libstdc++.so.6中包含动态库版本有哪些:strings /usr/lib/libstdc++.so.6 | grep GLIBC

发现确实没有3.4.20版本,3.4.20版本需要升级gcc的版本。

升级

x86平台的可以使用yum命令升级:

这种方法同样适用于安装gcc6,只需要将上面命令中7改成6即可。详情请参考: https://www.softwarecollections.org/en/scls/rhscl/devtoolset-7/


预先安装

1、下载源码包
到http://ftp.gnu.org/gnu/gcc/ 选择需要编译的gcc版本,这里我选择编译gcc的5.4.0版本:
下载源码包

2、进入解压后的目录,安装gcc依赖库

执行命令后它会自动下载mpfr、gmp、mpc、 isl这4个库。

确保一次性下载完毕,重复下载会导致文件名的最后自动添加序号,从而导致文件解压失败

如果执行报错:tar (child): lbzip2: no exec: no file or directory,确保安装了bzip2
3、在新目录中配置、编译、安装

编译很漫长。。。大约需要2个多小时。
最主要的是配置参数,可以参考gcc -v的配置参数,除了--prefix以外,其它指定目录的参数,没有什么要求,都不指定,使用默认的;

还有一个参数就是CFLAGS,像这样的以--with-的参数:--with-arch=armv7-a --with-float=hard --with-fpu=vfpv3-d16都转换为-m开头,并写在CFLAGS参数里

卸载旧的gcc

(1)查看安装的gcc版本

(2)执行卸载命令 rpm -e

提示gcc-4.8.5-39.armv7hl被1个软件依赖,卸载失败,则先卸载被依赖的软件包.

(4)再执行rpm -e gcc-4.8.5-39.armv7hl进行卸载。
卸载成功
(5) 验证,输入gcc -v

提示command not found,说明的确卸载成功了。

链接新的gcc和g++并更新更新libstdc++

删除旧的gcc和g++

链接新的gcc和g++

更新libstdc++

可以使用gcc -v输出新版本gcc信息,教程到此结束。

一些遇到的问题

error while loading shared libraries

默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,通常通过源码包进行安装时,如果不指定–prefix,会将库安装在/usr/local/lib目录下;当运行程序需要链接动态库时,提示找不到相关的.so库,会报错。也就是说,/usr/local/lib目录不在系统默认的库搜索目录中,需要将目录加进去。

1、首先打开/etc/ld.so.conf文件

2、加入动态库文件所在的目录:执行vi /etc/ld.so.conf,在”include ld.so.conf.d/*.conf”下方增加”/usr/local/lib”。

3、保存后,在命令行终端执行:/sbin/ldconfig;其作用是将文件/etc/ld.so.conf列出的路径下的库文件缓存到/etc/ld.so.cache以供使用,因此当安装完一些库文件,或者修改/etc/ld.so.conf增加了库的新搜索路径,需要运行一下ldconfig,使所有的库文件都被缓存到文件/etc/ld.so.cache中,如果没做,可能会找不到刚安装的库。/sbin/ldconfig -v 查看已经缓存的库。

经过以上三个步骤,”error while loading shared libraries”的问题通常情况下就可以解决了。
Linux中error while loading shared libraries错误解决办法

为什么使用 CFLAGS

当编译过程出现类似以上的错误,是因为目标三元组指示编译器已为硬浮动ABI配置。这意味着libgcc库也将是hardfp。错误消息表明,至少部分系统正在使用软浮动ABI。硬浮点运算与软浮点运算是不兼容的,所以会报以上的错。解决办法就是在编译参数时配置整个系统为硬浮点:-mfloat-abi=hard,而-mfloat-abi=hard是需要写到CFLAGS里的。
ARM compilation error, VFP registered used by executable, not object file

如何使用-mfloat-abi=hard

How do I use the –with-cpu and –with-arch when cross compiling stuff like gcc binutils and glibc
其中的一个答案

I instead used the ./configure CFLAGS='-mcpu=cortex-a7 -mfpu=neon-vfpv4' and the binaries are no longer compiled for armv5te. Thanks Everyone


文章 ARM centos7 升级gcc 转载需要注明出处
喜欢 (0)

您必须 登录 才能发表评论!