我的程序出了问题。当我尝试使用此行来编译我的C程序与assebly功能:用安装函数编译C程序,反之亦然
gcc -o program factarial.c
我得到这个,我不知道为什么:
/tmp/ccFKqbDP.o: In function `main':
factarial.c:(.text+0x11): undefined reference to `factarial_asm'
collect2: ld returned 1 exit status
这是我的C代码:
#include <stdio.h>
extern void factarial_asm();
int main()
{
factarial_asm (5);
return 0;
}
这是assebly代码:
.data
.text
.global _main
.type factarial_asm, @function
factarial_asm:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %eax
cmpl $1, %eax
je koniec
decl %eax
pushl %eax
call factarial_asm
movl 8(%ebp), %ebx
mull %ebx
koniec:
leave
ret
此外,当我试图用这个行编译汇编代码与C函数:
gcc -o program factarial.s
我得到这个问题:
/usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
/tmp/ccWCmTBe.o: In function `main':
(.text+0x3): undefined reference to `factarial'
collect2: ld returned 1 exit status
这是我的汇编代码:
SYSEXIT = 1
EXIT_SUCC = 0
SYSWRITE = 4
SYSCALL = 0x80
SYSREAD = 3
.align 32
.text
.global _main
main:
pushl $5
call factarial
movl $SYSEXIT, %eax
movl $EXIT_SUCC, %ebx
int $SYSCALL
而我的C代码:
#include <stdio.h>
int factarial(int n)
{
if(n == 0) return 1;
else return n * factarial(n - 1);
}
我知道这是非常多的问题,但到目前为止,我正在准备编译器和ld链接器,所以我不完全知道如何使用gcc。 此外,任何人都可以帮助我准备makefile文件?
谢谢你的所有建议。
好的,谢谢你的回答。我会试试:) – user3448282
不幸的是,问题保持不变: [对不起,对于外部链接,但我希望它更清晰。](http://pastebin.com/ddgrvw2V) – user3448282
我只注意到你的主要)是一个汇编函数。尝试将其从'main:'重命名为'_main:'。您可能还需要将'call factarial'改为'call _factarial'。 – mah