我正在尝试编译我的第一个汇编代码,并且遇到了从我的主C程序调用汇编函数的问题。我使用Eclipse 3.7.2和GCC编译器在Ubuntu 12.04上。这段代码几乎是从讲座中逐字复制的,我只是想让它运行以便能够逐步完成它并观察汇编指令。但由于某种原因,它会出现以下错误:
../src/addus.c: In function ‘main’:
../src/addus.c:21:13: error: called object ‘addus’ is not a function
make: *** [src/addus.o] Error 1
主C档:
#include <stdio.h>
#include <stdlib.h>
int addusina (int, int);
int addusinc (int, int);
int
main (void)
{
int a, b, sum;
a = 5;
b = 6;
sum = addusina (a, b);
printf ("You added %d and %d which equals %d", a, b, sum);
sum = addusinc (a, b);
printf ("You added %d and %d which equals %d", a, b, sum);
return EXIT_SUCCESS;
}
汇编文件,以.s格式保存:
.global _addusina
_addus:
pushl %ebp
movl %esp, %ebp
subl $16, %esp
movl 8(%ebp), %eax
addl 12(%ebp), %eax
movl %ebp, %esp
popl %ebp
ret
另外两件事:
我对外部c函数没有任何问题。
它确实似乎认识到addusina在主处使用,因为如果我返回并更改名称与调用不匹配,则会抛出“声明但未使用的函数”错误。
所以看起来它在某种程度上将其视为一种功能,因为它识别它正在主要使用。
任何指针都会很棒,因为我想修复它,所以我可以开始编写自己的代码。
编辑:我删除了不需要的外部并修复了movl拼写和汇编函数的名称。
编辑2:但是,即使在清理和重建项目之后,它仍然会向不再存在的函数名称抛出相同的错误。