[asm]unresolved external symbol _mainCRTStartup

0

Co to znaczy jeżeli w trakcie kompilacji programu assemblerowego wyskakuje błąd :

unresolved external symbol _mainCRTStartup ?

0

Nierozpoznany symbol "zewnetrzny" _mainCRTStartup. Np odwolujesz sie do czegos, co nigdzie nie jest zadeklarowane, bo np nie zaincludowales czegos.

0

Problem w tym, że ja niczego takiego w kodzie nie mam.

0

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
0

Sam sierota jesteś, nic nie warty ten twój kod teraz jest jeszcze gorzej wyrzuca 3x unresolved...

0
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.

0

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...

0

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ć.

0

Już to mam, ale dzięki za dobre chęci...

0

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.

0

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

0

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.