2
私は、MinGW GCCでコンパイルされたシンプルなCドライバクラスから、NASMでアセンブルされたアセンブリ関数を呼び出そうとしています。Assembly with C
次のコマンドを使用してファイルをコンパイルおよびアセンブルしています。
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();
}
いずれかが、私はこのエラーを取得する可能性がある理由と思っています?おかげさまで
UPDATE: 私は16 @ _MessageBoxAに4とメッセージボックス@ _ExitProcessへのExitProcessを変更してgccでリンクすることによって解決し、私の問題を得ました。
私はgccを試してみましたが、c:/ mingw/bin /../ lib/gcc/mingw32/4.9.3 /../../../ libmingw32.a(tlsthrd.o ):(。テキスト+ 0x218): 'InitializeCriticalSection @ 4 'への未定義参照c:/ mingw/bin /../ lib/gcc/mingw32/4.9.3 /../../../ libmingwex.a )。(テキスト+ 0x67):未定義の 'InitializeCriticalSection @ 4 'への参照 – Ian
@Ian、あなたはwin32などへのリンクを追加する必要があります。 '-lwin32'を追加してみてください。それがうまくいかない場合は、少なくともヒントです!いくつかの基本的なWindowsライブラリがありません。 –