GCC:Linux x86_64 编译 Linux aarch64 上运行的程序
更多内容:XiaoJ的知识星球
目录
- 1.编译知识介绍:
- 2.交叉编译工具链安装使用
- 2.1 apt安装
- 2.2 arm官网安装
- 3.交叉编译C/C++程序(主机上运行)
- 4.运行(arm64上运行)
本文,将介绍在Linux x86_64平台编译在Linux aarch64(ARM64)上能运行的C/C++程序。即:
- 编译器运行在X86_64架构平台上,编译生成Linux aarch64(ARM64)架构的可执行程序。
1.编译知识介绍:
编译类型:
-
编译器和目标程序都是相同架构的编译过程,被称为 本地编译 。
-
编译器和目标程序运行在不同架构的编译过程,被称为 交叉编译。
编译工具链命名:如 gcc-arm-xxx-x86_64-aarch64-none-linux-gnu:
-
gcc-arm-xxx: 表示ARM 架构工具链。
-
x86_64: 工具链的目标平台。
-
aarch64: 生成的可执行文件或目标代码的目标架构,默认采用小端字节序。
-
none: 表示没特定的操作系统相关组件,该工具链是为嵌入式系统或特定目标架构而构建的,而不是针对特定的操作系统。
-
linux-gnu: 表示生成的可执行文件或目标代码适用于 Linux 系统,并使用 GNU C 库(glibc)作为默认的 C 库。
2.交叉编译工具链安装使用
安装交叉编译工具链有如下三种方式:
-
Ubuntu下使用apt工具安装。
-
下载第三方制作好的工具链,如arm官网、Linaro等等。
-
使用crosstool-ng根据需要自己制作(过程复杂,不推荐)。
2.1 apt安装
#在主机上执行如下命令
sudo apt install gcc-aarch64-linux-gnu#安装完成后使用如下命令查看版本
aarch64-linux-gnu-gcc -v
2.2 arm官网安装
可以到arm官网下载编译链压缩包。
官网为:https://developer.arm.com/downloads/-/gnu-a
# 下载
wget https://developer.arm.com/-/media/Files/downloads/gnu-a/10.2-2020.11/binrel/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz?revision=972019b5-912f-4ae6-864a-f61f570e2e7e&rev=972019b5912f4ae6864af61f570e2e7e&hash=90B272942CAC63CBE2787E5F43E7B2C6D0AB20D6#解压
tar xvf gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/
#查看编译工具
ls gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin/#导出环境变量
export PATH=<you_path>/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin:$PATH#查看编译器信息
aarch64-none-linux-gnu-gcc -v
3.交叉编译C/C++程序(主机上运行)
安装好交叉编译器后,直接使用它对程序进行交叉编译即可。
# 在主机上运行# 在main.c程序所在的目录执行如下命令
aarch64-none-linux-gnu-gcc main.c –o main.elf
# 或
aarch64-none-linux-gnu-g++ main.cpp –o main.elf# readelf工具来查看具体的程序信息
readelf -a main.elf
4.运行(arm64上运行)
#执行主机编译的arm64平台程序./main.elf
声明:资源可能存在第三方来源,若有侵权请联系删除!