bash: ./xxx: 无法执行二进制文件: 可执行文件格式错误或者-bash: ./gcc1c: cannot execute binary file: Exec format error

写了个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为交叉编译工具

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值