我的程序出了問題。當我嘗試使用此行來編譯我的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