交叉编译gcc

前言

前一阵用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编吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值