文章目录
前言
前一阵用qemu做了个基于virt板卡的虚拟机,在不断完善,这两天想添加一个gcc进去,于是编译了一下gcc
环境ubuntu22.04
交叉编译工具链是通过ct-ng制作的,详情参考制作 交叉编译工具链
gcc版本7.5
下载
gcc下载
我要编gcc-7.5
https://mirror.linux-ia64.org/gnu/gcc/releases/gcc-7.5.0/
依赖项下载
gcc有几项和数学相关的编译依赖
gmp:https://gmplib.org/#DOWNLOAD
mpfr:https://www.mpfr.org/mpfr-current/#download
mpc:https://www.multiprecision.org/mpc/download.html
这里说明下,如果编译x86的话,编译器能找到apt安装的这些包,但交叉编译用交叉编译找不到
当然自己把这些包下载下来编译好,然后用–with-gmp这些选项指定路径
但没必要
直接下载到gcc源码的路径下,然后解压重命名成gmp mpfr mpc文件夹,编gcc的时候他自己会顺带编译
↑信息来源于configure报错,所以说一点英语不会是真不行
其他依赖项
都编gcc了,其他依赖项肯定能搞定了
configure选项
../configure --prefix=/data/gcc \
--build=x86_64-linux-gnu --host=aarch64-kirin7-linux-gnu \
--with-build-time-tools=/home/arco/x-tools/aarch64-kirin7-linux-gnu/bin \
CC=aarch64-kirin7-linux-gnu-gcc CC_FOR_TARGET=aarch64-kirin7-linux-gnu-gcc \
LD=aarch64-kirin7-linux-gnu-ld LD_FOR_TARGET=aarch64-kirin7-linux-gnu-ld \
CXX=aarch64-kirin7-linux-gnu-g++ CXX_FOR_TARGET=aarch64-kirin7-linux-gnu-g++ \
--enable-languages=c,c++ \
CFLAGS='-g -O2 -Wno-error -s' CXXFLAGS='-g -O2 -Wno-error -s'
这是我配过最长的configure
下面是为啥要这么配的说明:
–enable-languages
这个选项就离谱,configure --help里没写
我百度搜了才知道有这么个选项
--enable-languages=c,c++
编译c和c++的编译器,其他的不编,浪费时间、也未必编的出来
CXX和CXX_FOR_TARGET
报错:error adding symbols: file in wrong format
很明显,他想用x86的链接器去链我aarch64架构的文件
CFLAGS和CXXFLAGS
-g -O2是本来就有的,需要加-Wno-error让他不要把警告视为错误,-s是我要剥离符号不然太大了
–with-build-time-tools
--with-build-time-tools=/home/arco/x-tools/aarch64-kirin7-linux-gnu/bin
表面上看起来像是指定编译时使用工具的位置,但实际上似乎啥用也没有,如果不放心就加上吧(
我没再试了,编一次要不少时间呢
使用
编完了gcc,拉到我的aarch64虚拟机上去用
报错说没as
…?
好吧,as是binutils例的,又编了binutils弄到环境上,就可以使用gcc了
小结
我的交叉编译工具链的gcc版本是7.5,编gcc7.5成功了,编9.5失败了
原因不想看
所以如果要编更高版本的gcc,就去用更高版本的gcc编吧