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.
Problem w tym, że ja niczego takiego w kodzie nie mam.
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ć.
Już to mam, ale dzięki za dobre chęci...
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
Link szuka też symbolu 'start' automatycznie...
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.