2010-11-21 2 views
1

Я пытаюсь собрать простое приложение «Hello world» с Masm32. Он монтирует нормально, но когда я пытаюсь связать его, компоновщик говоритнерешенный внешний символ _WinMainCRTStartup

LINK: LNK2001 Ошибка: неразрешенный внешний символ _WinMainCRTStartup prog1.exe: фатальная ошибка LNK1120: 1 неразрешенных внешних

Это исходный код программы:

.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 

Я нашел на некоторых форумах, что это вызвано типом кодирования. Однако, похоже, это не имеет значения для моей проблемы.

ответ

2

Компонент принимает имя по умолчанию для точки входа. У вас есть несколько вариантов.
1. Используйте библиотеки C на платформе, которые, поскольку вы используете MASM, я предполагаю, что вы этого не хотите.
2. Переименуйте MAIN в _WinMainCRTStartup
3. Использование "-Посещение: MAIN" на link.exe командной строки (может потребоваться линия "общественного MAIN")

2

У вас есть 2 варианта:

  1. Переименуйте MAIN в _WinMainCRTStartup
  2. Установить Windows (/ Subsystem: WINDOWS) в Свойства/Настройка/Linker -> опции подсистемой.
1

Вам не хватает метки после инструкции окончания. Это должен быть тот же ярлык, на который был помечен сегмент кода, в вашем случае Main. Таким образом, вместо последней строки существа:

END

изменить его к

END MAIN

Смежные вопросы