Co to znaczy jeżeli w trakcie kompilacji programu assemblerowego wyskakuje błąd :
unresolved external symbol _mainCRTStartup ?
Co to znaczy jeżeli w trakcie kompilacji programu assemblerowego wyskakuje błąd :
unresolved external symbol _mainCRTStartup ?
Nierozpoznany symbol "zewnetrzny" _mainCRTStartup. Np odwolujesz sie do czegos, co nigdzie nie jest zadeklarowane, bo np nie zaincludowales czegos.
Mówiłem żebyś przejrzał przykłady dołączone do MASMa? Miałeś się też dowiedzieć co oznacza OFFSET i PTR... Masz, sieroto:
.686
.model flat, stdcall
option casemap :none
include \masm32\include\kernel32.inc
includelib \masm32\lib\msvcrt.lib
includelib \masm32\lib\kernel32.lib
extern _write:near
.data
tekst db 10, 'Nazywam się . . . ' , 10
db 'Mój pierwszy (?) program asemblerowy '
db 'działa już poprawnie!', 10, 0
TEXT_SIZE = $ - tekst - 1
.code
start:
push TEXT_SIZE
push OFFSET tekst
push 1
call _write
add esp, 12
push 0
call ExitProcess
end start
Kompilacja:
ml /c /coff plik.asm
link /SUBSYSTEM:CONSOLE plik.obj
Sam sierota jesteś, nic nie warty ten twój kod teraz jest jeszcze gorzej wyrzuca 3x unresolved...
C:\tmp>cat sierota.asm
.686
.model flat, stdcall
option casemap :none
include \masm32\include\kernel32.inc
includelib \masm32\lib\msvcrt.lib
includelib \masm32\lib\kernel32.lib
extern _write:near
.data
tekst db 10, 'Nazywam siŕ . . . ' , 10
db 'Mˇj pierwszy (?) program asemblerowy '
db 'dzia│a ju┐ poprawnie!', 10, 0
TEXT_SIZE = $ - tekst - 1
.code
start:
push TEXT_SIZE
push OFFSET tekst
push 1
call _write
add esp, 12
push 0
call ExitProcess
end start
C:\tmp>\masm32\bin\ml /c /coff sierota.asm
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997. All rights reserved.
Assembling: sierota.asm
C:\tmp>\masm32\bin\link /SUBSYSTEM:CONSOLE sierota.obj
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
C:\tmp>sierota.exe
Nazywam się . . .
Mój pierwszy (?) program asemblerowy działa już poprawnie!
C:\tmp>
Zmień studia skoro nawet ze skopiowaniem z forum sobie nie radzisz.
Ojej no i co? Zrobiłem dokładnie to co pokazałeś 3 razy i tak nie działa...To, że działa na twoim kompie nie znaczy, że musi działać u mnie...Nie musisz być od razu wielce naburmuszony...
http://www.masm32.com/masmdl.htm - ściągasz, rozpakowujesz, odpalasz. Jak zrobi swoje to robisz to co wyżej. Co prawda MASM to paskudne bydle, które zawsze miało kupę bugów, ale tak prosty kod nie ma prawa się nie działać.
bb:
Podaj pełne logi z konsoli. To jak wywołujesz. Twoje zmienne PATH i inne, katalog MASM'a, to czy masz jakieś Visual Studio w którym jest jakiś MASM. W ogóle najlepiej jak pokażesz kod. Zapewne includeujesz coś co wywołuje mainCRTStartup.
mainCRTStartup jest domyślnym entrypointem w linkerze link.exe. Z jednej strony to dobrze, a z innej źle, gdy ktoś nie wie o co chodzi.
Wklep link /? i poszukaj jak zmienić to entry. Pewnie znajdziesz /entry:symbol, więc dopisz /entry:start albo /entry:main do linii poleceń linkera:
link /SUBSYSTEM:CONSOLE /entry:start sierota.obj