我有一个64位的Ubuntu操作系统,我一直在学习32位汇编。我试图编译这两个文件:在Linux 64位上组合C和汇编(32位代码)
square.s:
#square.s
.section .text
.globl sqr
.type sqr, @function
sqr:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %eax
imull %eax, %eax
popl %ebp
ret
的main.c:
//main.c
#include <stdio.h>
extern long sqr(long);
int main(int argc, char* argv[])
{
long squared = sqr(10);
printf("%lu\n", squared);
return 0;
}
在我的32位虚拟机我用这个命令
gcc main.c square.s -o test
它们编
它工作。我遇到的问题是我想在我的64位机器上编译这些文件。我尝试了几种编译这些文件的方式,但都没有成功。 任何人都可以指向正确的方向吗?有没有这样做的选择?我试过-m32但这并不奏效。
当我这样做:
gcc -m32 -o test main.c square.s
我得到这个:
In file included from /usr/include/stdio.h:28:0,
from main.c:1:
/usr/include/features.h:323:26: fatal error: bits/predefs.h: No such file or directory
compilation terminated.
'gcc -m32 -o test main.c square.s'适合我,它怎么没有为你工作? – AusCBloke 2011-12-22 02:48:27
我不确定...让我再次检查 – 2011-12-22 02:49:18
OT但我认为推送和弹出是不必要的 – 2013-08-15 02:24:25