Скомпилируйте сборку с 64 до m32 ld error - PullRequest
0 голосов
/ 03 марта 2012

Мне интересно скомпилировать 32-битный ассемблерный код, используя 64-битную машину.

Это 32-битный код:

.global factorial

factorial:
    pushl %ebp          
    movl %esp, %ebp
    subl $8, %esp       
      pushl %esi
      pushl %ebx

    movl $1,-4(%ebp)
    movl $2,%esi
for:  
      cmpl 8(%ebp), %esi
    jg endfor
      movl -4(%ebp), %ebx
      imull %esi, %ebx
      movl  %ebx, -4(%ebp)
    incl %esi   

    jmp for
endfor:
      movl -4(%ebp), %eax   

    popl %ebx       
    popl %esi   
    movl %ebp, %esp
    popl %ebp   
    ret

Я строю:

> gcc test32.s -m32 -o test32

Но я получаю:

/usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../../../lib32/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status

знаете кого-нибудь, кто собирается? Заранее спасибо!

1 Ответ

0 голосов
/ 03 марта 2012

Вы пытаетесь скомпилировать и связать с исполняемым файлом.Чтобы это работало, вам нужна функция main, которая содержит функцию запуска программ.

Все, что у вас есть, - это единственная математическая функция без какого-либо способа определения входов и выходов.

...