【c++ debug】xx_x86_64.S: Assembler messages: Error: unknown mnemonic ‘pushq‘ -- ‘pushq %rdi‘
x86架构,arm架构,aarch64和arm64的区别,.s和.S的区别
·
1. 报错
-
swap_x86_64.S:20: Error: unknown mnemonic ‘pushq’ – ‘pushq %rdi’ … make swap_x86_64.S.o error
2. 原因与解决方法
- 问题原因:在ARM平台去编译x86的.o目标文件,使用了x86的.S文件,不识别pushq/popq等汇编指令,指令集报错,编译失败
- 解决办法:使用对应的arm文件进行编译,如swap_aarch64.S
3. 拓展
拓展1:aarch64和arm64的区别
- 同一个东西。aarch64是ARMv8-A 架构中引入的64位指令集,历史上linux社区将arm64作为内核的端口调用,而不是aarch64,导致遗留了一些arm64的用法。LLVM社区后端称为aarch64,Apple后端也称aarch64为arm64,后来两者合并,后端现在统一称为aarch64
拓展2:大写.S和小写.s的区别
- 编译过程:预处理->编译->汇编->链接
- 汇编程序的后缀是区分大小写的.S和.s
- 相同:两者都是汇编代码文件
- 不同:.s不支持预处理,.S支持预处理
- 支持预处理的意思:预处理指添加头文件和宏替换等操作,.S支持预处理指如果想要在汇编代码中使用宏或者头文件,那么保存的汇编文件应该以.S为后缀
【参考文章】
aarch64指令集和arm64指令集区别
.S和.s导致的编译报错
64位操作系统去编译生成32位的目标文件报错
.S和.s的区别
created by shuaixio, 2023.10.28
更多推荐
所有评论(0)