写了个1.c测试程序,输出hello world。
分别用x86_64版本和arm64版本的gcc编译器编译同一个文件
gcc 1.c -o gcc1c
aarch64-linux-gnu-gcc 1.c -o aarch641c
用file命令查看这两个文件的类型,可以看到这两个可执行文件一个是x86_64类型的,一个是arm64类型的
因为pc上的ubuntu是x86_64架构的,所以使用它默认的gcc编译器编译后得到的可执行文件也只适用于在x86_64架构上运行,如果把这个可执行文件放到arm架构或者mips等其他架构机器上运行,则会报错说无法执行二进制文件,可执行文件格式错误。下图为验证:执行aarch1c的时候提示格式错误,而gcc1c就可以正常运行
同理,使用arm64版本的gcc(我的是aarch64-linux-gnu-gcc)编译出来的文件也只能在arm64平台上运行,如果把把这个文件放到pc上的ubuntu上运行,也会报错格式不正确。
交叉编译是指在一台主机上进行编译,生成在另一种不同的目标平台上运行的可执行文件,aarch64-linux-gnu-gcc为交叉编译工具