我正在尝试链接一些汇编文件,但我遇到了一些问题。我使用nasm
并使用以下命令创建目标文件:
nasm -f elf -o task1.o task1.asm
当我尝试将其与其他文件链接时:
gcc -o task1 task1.o asm_io.o
我收到错误:
i386 architecture of input file 'task1.o' is incompatible with i386:x86-64 output
和文件asm_io.o的错误相同。
我的Ubutnu是64位 当我尝试命令时:
nasm -f elf64 -o task1.o task1.asm
我收到的错误是64位模式下不支持指令pusha
和popa
你能告诉我使用什么指令而不是pusha
和popa
,以及使用什么gcc命令?
答案 0 :(得分:1)
您能否告诉我使用哪些说明代替
pusha
和popa
,以及使用哪种gcc命令?
有关如何为PUSHA
和POPA
编写等效代码的建议,请参阅stackoverflow/6837392。
如果您希望在64位主机上构建32位二进制文件,则需要明确指定-m32
切换到GCC,并且需要安装32位开发环境。
有关在Ubuntu上构建32位程序的更多信息,请参阅discussion about multi-arch support和Installing Compilers社区维基页面。