交叉编译工具链和使用,制作安装包


基于实践的一些粗浅理解,望大拿们不吝校正。

为什么要交叉编译

对于arm或riscv等终端或边缘设备,由于性能较低,难以直接编译较大的工程(非常耗时,以至于无法承受)。通常我们需要在x86服务器上,对这些设备的软件程序进行交叉编译,快速生成目标文件和可执行文件。

下载交叉编译工具链

交叉编译所需要的编译环境,就要用到交叉编译工具链。
由于是在宿主服务器上,编译目标设备系统的目标文件,就需要匹配目标系统内核和编译器,而GCC又依赖于其他的一些库,因此需要一个完整闭环的依赖链,把这些东西做到一起,就是交叉编译工具链。
工具链中给出了对应目标设备系统上匹配的相关工具。可以根据目标设备的芯片类型和系统要求,选择对应的工具链下载包,参考:
https://toolchains.bootlin.com/

怎样选择工具链版本

工具链的架构类型

在目标设备上查看uname -a,确认目标系统的类型,选择对应的工具链类型,比如:
uname -a

工具链的版本

以aarch64 glibc工具链(https://toolchains.bootlin.com/releases_aarch64.html)为例,我们从下载列表上,可以看到对应的工具链版本中,对应的GCC,GDB,Linux headers,glibc,binutils版本号,这些工具其实就是工具链里主要的东西。所选择的工具链版本,尽可能与目标设备系统的内核版本和编译器版本一致(如果不能精确一致,则选择比目标设备系统编译器版本略低的工具链版本,向后兼容;如果编译器版本选定后,header版本比目标设备系统的内核版本高,则只能要求开发工程内核态程序代码自身做到兼容,否则交叉编译成功的目标文件可能会在目标设备系统上运行时报错。)
比如,使用cat /proc/version查看:
cat /proc/version
最主要的GCC版本是6.3.0,那么我们要选择的工具链版本,最好对应GCC的版本是6.3.0的就好,GCC所依赖的其他库也将可以一致兼容,而对应GCC为6.3.0的工具链版本,所含linux header的版本都比目标设备系统的内核版本高,则要求开发工程内核态代码的时候进行适配和测试。

工具链里都有啥

工具链里,主要是gcc和gcc依赖的各种库,以形成一个可以交叉编译的闭环依赖环境(除此之外,编译过程不需要其他东西,该有的都有)。下载一个工具链版本并在当前目录解压:

tar -zxvf aarch64--glibc--bleeding-edge.tat.gz

之后,我们进入目录看到工具链目录里包含如下一些文件和内容:
工具链内容
查看READ

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值