У меня 64-битная операционная система Ubuntu, и я изучаю 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.