https://kkua.github.io/post/cross-compile-rust-to-aarch64/
不同ARM交叉编译工具链区别
“arm生态发展与交叉编译工具链选择”一文对ARM交叉编译工具链介绍得比较详细,以下引用该文章“交叉编译链选择”部分内容,更多详细介绍请查看原文
免费版目前有三大主流工具商提供,第一是GNU(提供源码,自行编译制作),第二是****Codesourcery,第三是Linora。
收费版有ARM原厂提供的armcc、IAR提供的编译器等等,因为这些价格都比较昂贵,不适合学习用户使用,所以不做讲述。
arm-none-linux-gnueabi-gcc:是 Codesourcery 公司(目前已经被Mentor收购)基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM(32位)系统中所有环节的代码,包括裸机程序、u-boot、Linux kernel、filesystem和App应用程序。
arm-linux-gnueabihf-gcc:是由 Linaro 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM(32位)系统中所有环节的代码,包括裸机程序、u-boot、Linux kernel、filesystem和App应用程序。
aarch64-linux-gnu-gcc:是由 Linaro 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARMv8 64位目标中的裸机程序、u-boot、Linux kernel、filesystem和App应用程序。
arm-none-elf-gcc:是 Codesourcery 公司(目前已经被Mentor收购)基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM MCU(32位)芯片,如ARM7、ARM9、Cortex-M/R芯片程序。
arm-none-eabi-gcc:是 GNU 推出的的ARM交叉编译工具。可用于交叉编译ARM MCU(32位)芯片,如ARM7、ARM9、Cortex-M/R芯片程序。
安装交叉编译工具链
-
访问Linaro官网下载最新的适合我们机器的交叉工具链版本,由于我使用的是Windows所以选择下载mingw32版本
-
解压交叉编译工具链到合适的位置
-
设置环境变量。把工具链bin目录的路径加入path环境变量
配置Rust环境
- 运行命令
rustup target add aarch64-unknown-linux-gnu
,添加aarch64-unknown-linux-gnu
rust toolchain到系统 - 修改cargo的
config
文件,配置新的目标架构
|
|
- 最后
cargo build
时需要添加参数--target aarch64-unknown-linux-gnu
。若是想要省略该参数则需要对config
作如下的修改,以改变默认的构建目标
|
|
- 另外,也可以给
build --target aarch64-unknown-linux-gnu
命令设置别名从而缩短构建命令。比如按下面的方式修改config
文件后,就可以使用cargo build_aarch64
来构建程序了
|
|
至此,我们就得到了适用于aarch64-unknown-linux环境的二进制可执行目标文件