2010-11-21 6 views
1

J'essaye d'assembler une simple application "Hello world" avec Masm32. Il assemble bien, mais lorsque je tente de le lier, l'éditeur de liens ditsymbole externe non résolu _WinMainCRTStartup

LINK: erreur LNK2001: symbole externe non résolu _WinMainCRTStartup PROG1.EXE: erreur fatale LNK1120: 1 unresolved externals

C'est le code source du programme:

.586P 

.MODEL FLAT, STDCALL 
STD_OUTPUT_HANDLE equ -11 

; Prototypes of external procedures 
EXTERN [email protected]:NEAR 
EXTERN [email protected]:NEAR 
EXTERN [email protected]: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 [email protected] 
    MOV HANDL, EAX 


; Output the buffer contents to the console 
    PUSH 0 
    PUSH OFFSET NUMW 
    PUSH NUMB 
    PUSH OFFSET BUFER 
    PUSH HANDL 
    CALL [email protected] 

;Exit application 
    PUSH 0 
    CALL [email protected] 
_TEXT ENDS 
END 

J'ai trouvé dans certains forums que cela est dû au type de code. Cependant, cela ne semble pas avoir d'importance pour mon problème

Répondre

2

L'éditeur de liens assume le nom par défaut du point d'entrée. Vous avez quelques options.
1. Utilisez les bibliothèques C sur la plate-forme, car vous utilisez MASM, je suppose que vous ne voulez pas.
2. Renommez votre MAIN _WinMainCRTStartup
3. Utilisez "-entrée: MAIN" sur la ligne de commande Link.exe (vous pouvez avoir besoin d'une ligne "MAIN public")

2

Vous avez 2 options:

  1. Renommer votre MAIN _WinMainCRTStartup
  2. Set (Windows/SUBSYSTEM: WINDOWS) dans Propriétés/Configuration/Linker -> option SubSystem.
1

Il vous manque l'étiquette après l'instruction de fin. Ce devrait être le même label que le segment de code a été étiqueté, dans votre cas Main. Ainsi, au lieu de votre dernière ligne étant:

END

changement à

END MAIN

Questions connexes