我试图用一个用MinGW GCC编译的简单C驱动程序类调用与NASM组装的汇编函数。
我使用以下命令编译和汇编文件。
nasm -f win32 asm_main.asm -o asm.o
gcc -c driver.c -o driver.o
和以下命令将它们链接在一起。
ld.exe asm.o driver.o -L"C:\Windows\SysWOW64" -lkernel32 -luser32 -o app.exe
我收到错误消息:
driver.o:driver.c:(.text+0x7): undefined reference to `__main'
这是我的示例程序集和C代码
; asm.asm
extern _MessageBoxA, _ExitProcess
section .data
title db "Greeting", 0
message db "Hello World!", 0
section .bss
section .text
global _asm_main
_asm_main:
enter 0, 0
push dword 0
push dword title
push dword message
push dword 0
call _MessageBoxA
push dword 0
call _ExitProcess
mov eax, 0
leave
ret
// driver.c
extern int asm_main();
void main()
{
asm_main();
}
有没有想过为什么我会收到这个错误? 感谢。
更新 我通过将ExitProcess更改为_ExitProcess @ 4并将MessageBox更改为_MessageBoxA @ 16并使用gcc进行链接来解决问题。
答案 0 :(得分:1)
您错过了gcc C启动例程__main
(使用gcc编译时由main
调用),这通常在libgcc中定义。获得它的最简单方法是链接gcc(包括它)而不是ld。或者,将-lgcc
添加到链接命令行。