3

Masm32 で簡単な「Hello world」アプリケーションを組み立てようとしています。うまく組み立てられますが、リンクしようとすると、リンカーは次のように言います

リンク: エラー LNK2001: 未解決の外部シンボル _WinMainCRTStartup prog1.exe: 致命的なエラー LNK1120: 1 つの未解決の外部シンボル

これは、プログラムのソース コードです。

.586P

.MODEL FLAT, STDCALL
STD_OUTPUT_HANDLE equ -11

; Prototypes of external procedures
EXTERN GetStdHandle@4:NEAR
EXTERN WriteConsoleA@20:NEAR
EXTERN ExitProcess@4:NEAR

; INCLUDELIB directives for the linker
includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\kernel32.lib

;============ data segment =================
_DATA SEGMENT
HANDL DWORD ?
BUFER DB "Hello world\n", 0
NUMB  DWORD ?
NUMW  DWORD ?
_DATA ENDS

_TEXT SEGMENT
MAIN:
;====== Get the output handle ======
     PUSH STD_OUTPUT_HANDLE
     CALL GetStdHandle@4
     MOV  HANDL, EAX


; Output the buffer contents to the console
     PUSH 0
     PUSH OFFSET NUMW
     PUSH NUMB
     PUSH OFFSET BUFER
     PUSH HANDL
     CALL WriteConsoleA@20

;Exit application
     PUSH 0
     CALL ExitProcess@4
_TEXT ENDS
END

いくつかのフォーラムで、これはエンコード タイプが原因であることがわかりました。しかし、それは私の問題には関係ないようです

4

4 に答える 4

4

リンカーは、エントリ ポイントの既定の名前を想定しています。いくつかのオプションがあります。
1.プラットフォームでCライブラリを使用します。これは、MASMを使用しているため、使用したくないと思います。
2. MAIN の名前を _WinMainCRTStartup に変更し
ます。 3. Link.exe コマンド ラインで「-entry:MAIN」を使用します (「public MAIN」ラインが必要な場合があります)。

于 2010-11-25T06:49:23.187 に答える
3

2 つのオプションがあります。

  1. MAIN の名前を _WinMainCRTStartup に変更します。
  2. Properties/Configuration/Linker -> SubSystem オプションで Windows (/SUBSYSTEM:WINDOWS) を設定します。
于 2012-10-08T14:22:36.987 に答える