如何使用asm过程并在C中获取返回值

时间:2014-12-13 17:46:09

标签: c gcc assembly toolchain

我有一个gcc版本2.95.2 19991024(发布)工具链,现在我需要使用位于makefile的同一文件夹中的文件中的Assembly函数。

我已经尝试了很多方法将这个文件放在我的工具链中,没有运气。

基本上我在ASM中声明:

.globl  util_MyFunc
util_MyFunc: 
...

在C文件的主要空白处:

extern void util_MyFunc();
int main(void) {  
 util_MyFunc();
...

当我编译时,我得到了与未识别相关的错误:

/cygdrive/c/MyDev/tmp/main.o(.text+0x8bc): undefined reference to `util_MyFunc'
make: *** [test.o] Error 1

谢谢!

编辑:

我试图使用以下来生成" .o"来自asm文件的文件

C:\MyDev>gcc -c test.asm -o test.o

结果:

gcc: utils.asm: linker input file unused since linking not done

或:

C:\MyDev>gcc test.asm -o test.o

但是...

ld: cannot open crt0.o: No such file or directory

1 个答案:

答案 0 :(得分:2)

gcc期望的程序集文件的规范扩展是.s。您应该使用它(或直接使用as汇编)。也可以将-o test.o放在输入文件名之前。最后,如果要使用libc,则需要libc开发文件。否则请使用-nostdlib开关。

您应该尝试:gcc -o test main.c utils.s