c - 如何使用 asm 程序并在 C 中获取返回值

标签 c gcc assembly toolchain

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

我尝试了很多方法将该文件放入我的工具链,但没有成功。

基本上我在 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

谢谢!

编辑:

我尝试使用以下方法从 asm 文件生成“.o”文件

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

最佳答案

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

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

关于c - 如何使用 asm 程序并在 C 中获取返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27461806/

相关文章:

C 将文件参数与 GetOpt 一起使用

c++ - GLIBCXX_3.4.21 未在具有链接时间引用的文件 libstdc++.so.6 中定义

c - 如何检查 __builtin_ 函数在 gcc 上是否可用

c++ - Autotools 和 OpenSSL MD5/RAND_bytes 未定义

c - 汇编优化函数调用,允许从函数中取出常量吗?

c - 指针处的值仅在使用时才会更新

c - 在转换不同大小的结构指针时理解内存结构

assembly - 使用 CALL 读取 RIP 避免 shellcode 中的 0xFF 字节?

java - pass1汇编器的符号表

c - 整数到字符串