本文简单介绍了一下,目前常见的四种CPU架构和交叉编译。
通过交叉编译工具链,开发者可以在一种架构的机器上为其他架构生成可执行文件,极大提高了开发效率。
指令集:CISC(复杂指令集)。
x86:32 位。
x86_64:64 位(兼容 32 位)。
应用场景:PC、服务器、高性能计算。
GCC:
gcc -m32 -o program32 program.c # 编译为 32 位程序
gcc -m64 -o program64 program.c # 编译为 64 位程序
Clang:
clang -m32 -o program32 program.c
clang -m64 -o program64 program.c
指令集:RISC(精简指令集)。
ARMv7:32 位。
ARMv8:64 位。
应用场景:移动设备、嵌入式系统、物联网。
GCC(ARM 工具链):
arm-linux-gnueabi-gcc -o program program.c # 32 位 ARM
aarch64-linux-gnu-gcc -o program program.c # 64 位 ARM
Clang:
clang --target=arm-linux-gnueabi -o program program.c # 32 位 ARM
clang --target=aarch64-linux-gnu -o program program.c # 64 位 ARM
指令集:RISC(精简指令集)。
位宽:
MIPS32:32 位。
MIPS64:64 位。
应用场景:嵌入式系统、网络设备(如路由器)。
GCC(MIPS 工具链):
mips-linux-gnu-gcc -o program program.c # 32 位 MIPS
mips64-linux-gnuabi64-gcc -o program program.c # 64 位 MIPS
Clang:
clang --target=mips-linux-gnu -o program program.c # 32 位 MIPS
clang --target=mips64-linux-gnuabi64 -o program program.c # 64 位 MIPS
指令集:RISC(精简指令集),开源设计。
位宽:
RV32:32 位。
RV64:64 位。
应用场景:嵌入式系统、学术研究、新兴硬件。
编译工具
GCC(RISC-V 工具链):
riscv64-unknown-elf-gcc -o program program.c # 64 位 RISC-V
riscv32-unknown-elf-gcc -o program program.c # 32 位 RISC-V
Clang:
clang --target=riscv64 -o program program.c # 64 位 RISC-V
clang --target=riscv32 -o program program.c # 32 位 RISC-V
定义:在一种架构的机器上编译生成另一种架构的可执行文件。
应用场景:
命名规则:架构-系统-编译器,例如:
arm-linux-gnueabi-gcc:ARM 架构,Linux 系统,GCC 编译器。
riscv64-unknown-elf-gcc:RISC-V 架构,嵌入式系统,GCC 编译器。
Debian/Ubuntu:
sudo apt install gcc-arm-linux-gnueabi gcc-aarch64-linux-gnu
sudo apt install gcc-mips-linux-gnu gcc-riscv64-linux-gnu
CentOS/RHEL:
sudo yum install gcc-arm-linux-gnu gcc-aarch64-linux-gnu
sudo yum install gcc-mips-linux-gnu gcc-riscv64-linux-gnu
// hello.c
#include
int main() {
printf("Hello, Cross-Compilation!\n");
return 0;
}
ARM 32 位:
arm-linux-gnueabi-gcc -o hello_arm hello.c
ARM 64 位:
aarch64-linux-gnu-gcc -o hello_arm64 hello.c
MIPS 32 位:
mips-linux-gnu-gcc -o hello_mips hello.c
RISC-V 64 位:
riscv64-unknown-linux-gnu-gcc -o hello_riscv hello.c
file hello_arm
#输出示例:ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked...
模拟器:使用 QEMU 模拟目标架构运行程序。
sudo apt install qemu-user
qemu-arm ./hello_arm
qemu-aarch64 ./hello_arm64
qemu-mips ./hello_mips
qemu-riscv64 ./hello_riscv
目标设备:将可执行文件传输到目标设备运行。
架构 指令集 位宽 编译工具 交叉编译工具链
x86/x86_64 CISC 32/64 位 GCC、Clang 无需交叉编译
ARM RISC 32/64 位 GCC、Clang arm-linux-gnueabi-gcc 等
MIPS RISC 32/64 位 GCC、Clang mips-linux-gnu-gcc 等
RISC-V RISC 32/64 位 GCC、Clang riscv64-unknown-elf-gcc 等