汇编程序和C代码之间的链接错误(MinGW)

时间:2016-09-23 19:32:29

标签: assembly linker x86 mingw

错误:在函数' _go':c.asm :(。text + 0x6):未定义对`k_main'的引用
汇编:
asm \ nasm -f elf -o c.o c.asm
bin \ ld -oformatbinary -Ttext 0x200000 -o bin \ kernel.bin co bin \ video.o bin \ inter.o bin \ finter.o bin \ kernel.o -I" C:\ MinGW \ include&#34 ; -L" C:\ MinGW \ lib"
c.asm:

section .text
global _go
extern  k_main
_go:
    mov esp, 0x200000-4`
    call  k_main


kernel.c

void k_main(){
    //iint();
    //initial();
    for(;;);
}


请帮忙

1 个答案:

答案 0 :(得分:2)

标识符的实际编码由object-format / platform / compiler定义,在这种情况下,C函数得到一个下划线前缀,因此符号实际上是_k_main

如果您希望它是可移植的,您可以使用宏进行编码,或者您可以在C源代码中强制使用该符号。