当前位置 : 主页 > 编程语言 > c语言 >

源码编译GCC7.3.0

来源:互联网 收集:自由互联 发布时间:2023-08-25
环境 系统 CentOS Linux release 7.9.2009 (AltArch) docker虚拟机 创建/home/gcc目录构建整个gcc编译工程目录 mkdir /home/gcc cd /home/gcc 源码下载 wget http://ftp.gnu.org/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.xz 解压 tar jxv

环境

系统 CentOS Linux release 7.9.2009 (AltArch)

docker虚拟机

创建/home/gcc目录构建整个gcc编译工程目录

mkdir /home/gcc

cd /home/gcc

源码下载

wget http://ftp.gnu.org/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.xz

解压

tar jxvf gcc-7.3.0.tar.xz

创建中间文件输出目录

mkdir gccbuild

创建最终目标文件输出目录

mkdir gccout

ls查看当前的文件夹,有如下的文件夹

gccout gccbuild gcc-7.3.0


安装gcc的依赖软件

gcc的软件包内提供了自动下载需要软件的脚本: ./contrib/download_prerequisites

会下载四个文件:

gmp-6.1.0.tar.bz2

mpc-1.0.3.tar.gz

isl-0.16.1.tar.bz2 

mpfr-3.1.4.tar.bz2


把这几个文件复制到外面一层目录,解压缩

tar jxvf isl-0.16.1.tar.bz2 

tar jxvf mpfr-3.1.4.tar.bz2

tar jxvf gmp-6.1.0.tar.bz2

tar zxvf mpc-1.0.3.tar.gz


把解压的目录复制到gcc-7.3.0目录中

mv isl-0.16.1  gcc-7.3.0/isl

mv mpfr-3.1.4 gcc-7.3.0/mpfr

mv gmp-6.1.0 gcc-7.3.0/gmp

mv mpc-1.0.3  gcc-7.3.0/mpc


重置相关的环境变量


unset LIBRARY_PATH CPATH C_INCLUDE_PATH PKG_CONFIG_PATH CPLUS_INCLUDE_PATH INCLUDE


否则会导致宏定义冲突 ,出现大量如下错误

error: Unable to find a suitable type for HOST_WIDE_INT

error: 'HOST_WIDE_INT' does not name a type

error: expected ',' or '...' before 'x' ffs_hwi (unsigned HOST_WIDE_INT x)

error: expected initializer before 'zext_hwi'

zext_hwi (unsigned HOST_WIDE_INT src, unsigned int prec)

最好仔细检查一遍,输出环境变量是否为空

echo $CPLUS_INCLUDE_PATH


构建Makefile

进入gccbuild文件夹,进行编译,目标是将生成的中间文件存放在gccbuild文件夹,避免污染源码

cd gccbuild
../gcc-7.3.0/configure --prefix=/home/gcc/gccout/


可以添加如下相关参数

--enable-languages 表示编译出来的编译器支持哪些语言,例如--enable-languages=c,c++ 说明支持c.c++语言编译

--disable-multilib 表示编译出来的编译器不支持交叉编译其他平台的程序

--disable-checking表示编译出来的编译器不做额外检查

例如

../gcc-7.3.0/configure --prefix=/home/gcc/gccout/  --enable-languages=c,c++ --disable-multilib --host=aarch64-linux-gnu


编译


make  -j64

可以通过如下指令,查看有多少CPU加速编译,单核CPU编译耗时2-3小时

cat /proc/cpuinfo | grep "processor" | wc -l


安装

make install


问题

configure: error: building out of tree but ../gcc/gcc-7.3.0 contains host-aarch64-unknown-linux-gnu.

Use a pristine source tree when building in a separate tree

出现该问题是编译输出的中间文件并没有按照上面操作,先进入中间输出文件编译,重新下载源码,按照上面操作即可,重新执行configure无效

上一篇:结构体的定义和初始化
下一篇:没有了
网友评论