ein Programm kompilieren, um im DOS-Modus zu laufen

8

Ich schreibe ein einfaches Programm, um im DOS-Modus zu laufen. Alles funktioniert unter emulierten Konsole in Win XP / Vista / Seven, aber nicht in DOS. Der Fehler lautet: this program caonnot be run in DOS mode . Ich frage mich, ob das ein Problem mit Compiler-Flags oder etwas größerem ist.

Für die Programmierung verwende ich Code :: Blocks v 8.02 mit solchen Einstellungen zum Kompilieren:

-Wall -W -pedantisch -pedantische Fehler

in Projekt \ Build-Optionen \ Compiler-Einstellungen

Ich habe einen sauberen DOS-Modus ausprobiert, von CD gestartet und DOS in der virtuellen Maschine eingerichtet. Derselbe Fehler erscheint.

Sollte ich noch einige Compiler-Flags aktivieren? Einige spezifische 386/486 Optimierungen?

AKTUALISIEREN

Ok, ich habe DJGPP heruntergeladen, installiert und konfiguriert. Selbst einige Probleme mit libs und includes wurden gelöst. Habe noch zwei Fragen.

1) Ich kann keinen Code kompilieren, der _strdate und _strtime aufruft, ich habe die Includes doppelt überprüft, da MSDN sagt, dass time.h benötigt wird, aber immer noch Fehler sagt: _strdate was not declared in this scope , ich habe sogar versucht, std :: _ strdate hinzuzufügen, aber dann habe ich 4, nicht 2 Fehler sazing das gleiche

2) Der zweite Code ist ungefähr gotoxy , sieht so aus:

%Vor%

Fehler sagt, es gibt keine windows.h, also habe ich es an Ort und Stelle gesetzt, aber dann gibt es viele weitere Fehler, die sagen, einige fehlen von windows.h, ich suppose wird es nicht Arbeit, weil diese Funktion nur für Windows richtig ist? Gibt es eine Möglichkeit, ähnliche gotoxy für DOS zu schreiben?

UPDATE2

1) gelöst mit time(); anstelle von _strdate(); und _strtime(); hier ist der Code

%Vor%

Es kompiliert jetzt unter DJGPP.

UPDATE3

Müssen Sie noch einen Code mit gotoxy lösen - ersetzte ihn mit irgendeinem anderen Code, der kompiliert (unter DJGPP).

Danke alle für Hilfe. Habe gerade ein paar neue Dinge über das Kompilieren gelernt (Flags, alte IDEs wie DJGPP, OpenWatcom) und aktualisierte Speichereinstellungen, die DOS zum Laufen bringen: -)

    
qlf00n 14.01.2010, 19:18
quelle

9 Antworten

7

Aus dem Sound der Dinge kompilieren Sie gerade ein Windows-Konsolenprogramm. Obwohl es sich um ein Konsolenprogramm handelt, muss Windows weiterhin ausgeführt werden.

Um ein Programm zu kompilieren, das unter echtem DOS läuft, müssen Sie einen (wahrscheinlich sehr alten) Compiler und (insbesondere) einen Linker finden, der auf DOS abzielt und DOS-MZ-Programme erzeugen kann. Der letzte Microsoft-Compiler, der MS-DOS als Ziel hat, war VC ++ 1.52c. Wenn Speicher dient, fuhr Borland DOS etwas später, durch etwas wie Broland C ++ 5 oder so.

Ich glaube, wenn Sie die Digital Mars-Website überprüfen, hat er möglicherweise noch einen C ++ - Compiler, der auf DOS abzielt. Sonst wirst du auf der Suche nach etwas gebrauchtem und ziemlich altem sein.

Edit: Andere Antworten erinnerten mich an DJGPP und OpenWatcom. Ich entschuldige mich, dass ich sie vorher nicht erwähnt habe.

Bedenken Sie, dass Borland und Microsoft aus C ++ - Sicht wirklich alte Compiler sind - sie verwenden überhaupt keine Namespaces, und die Vorlagenunterstützung variiert von nicht vorhanden im Microsoft Compiler bis mittelmäßig in Borlands. DJGPP ist im Grunde ein DOS-Extender, auf den gcc portiert wurde; Der Grad, in dem es veraltet (oder modern) ist, hängt davon ab, welche Version von gcc beteiligt ist. Der Digital Mars Compiler ist etwas moderner als der Borland, wenn ich mich nicht irre, aber Walter Bright verbringt jetzt die meiste Zeit damit, an D statt an C ++ zu arbeiten, so dass der C ++ Compiler nicht wirklich mit gcc oder MSVC konkurriert. ganz zu schweigen von etwas wie Comeau oder Intel, das auf dem EDG-Frontend basiert.

    
Jerry Coffin 14.01.2010, 19:25
quelle
3

Was Sie als "emulierte Konsole" bezeichnen, hat nichts mit Emulation oder DOS zu tun. Sie erzeugen wahrscheinlich immer noch ausführbare 32/64-Bit-Windows-Dateien, indem Sie einfach das Konsolensubsystem verwenden.

Beginnen Sie, indem Sie Ihren Compiler in einen ändern, der 16-Bit-Code erzeugen kann. Ich bin mir ziemlich sicher, dass OpenWatcom weiterhin das 16-Bit-MZ-Ziel unterstützt. Ich bin auch nicht sicher und weiß nicht, ob es noch gepflegt wird.

.

Bearbeiten: über gotoxy , könnten Sie:

  1. Benutze PDCurses und kümmere dich nicht darum, was intern verwendet wird (ich denke, es ist INT10)
  2. Verwenden Sie unterbrechen Sie 0x10 auf eigene Faust
  3. Schreiben Sie direkt in den VGA-Speicher bei 0xB8000

Ich habe eigentlich nie für DOS entwickelt, daher weiß ich nicht, welche Methode als die beste gilt. Der Dritte scheint der Schnellste zu sein.

    
Cat Plus Plus 14.01.2010 19:26
quelle
2

Werfen Sie einen Blick hier: MinGW kompilieren für MS DOS

Verwenden Sie DJCPP grundsätzlich als Back-End für Code :: Blocks.

    
ridecar2 14.01.2010 19:26
quelle
1

Ich war es gewohnt, DJGPP zu verwenden, um Dinge unter einer einfachen ms-dos .. Homepage zu kompilieren >.

Es ist eine vollständige kostenlose Compiler-Suite, die immer noch nahtlos funktionieren sollte!

    
Jack 14.01.2010 19:55
quelle
1

Sie können gotoxy von conio.h header verwenden, das mit DJGPP geliefert wird.

    
Laurynas Biveinis 16.01.2010 12:13
quelle
0

Sie möchten Ihrem Compiler sagen, dass er auf dos zielt. Ich weiß nicht, wie das geht, tut mir leid, aber vielleicht wird das ein Hinweis für das Googeln sein ...

Wenn Sie sich die Code :: Blocks-Website ansehen, scheint Ihre IDE verschiedene Compiler (GCC, MSVC ++ und andere) zu unterstützen. So, zuerst, herauszufinden, welchen Compiler Sie verwenden. Dann überprüfen Sie diese Compiler-Dokumentation.

Sobald Sie wissen, welchen Compiler Sie verwenden, können Sie Ihre Frage umformulieren (verfeinern) - ich bin sicher, dass jemand hier auf stackoverflow es wissen wird.

Laut diesem Thread scheint es der Open Watcom] 2 Compiler Ziele dos. Außerdem wird es von Ihrer IDE (Code :: Blocks) unterstützt.

Viel Glück!

    
Daren Thomas 14.01.2010 19:21
quelle
0

Es gibt einen DOS-Stub-Header in der Win32-Exe, der diese Nachricht anzeigt, wenn er in reinen DOS-Anweisungen ausgeführt wurde. Sie sollten es mit einem DOS-Compiler, z. B. Turbo C, kompilieren oder Ziel-Plattenform bereitstellen, wenn DOS in Fallcodeblöcken darunter ist. Es ist ein Software-Problem, keine Hardware-Plattform.

    
affan 14.01.2010 19:31
quelle
0

Verwenden Sie die Gotoxy aus der Bibliothek conio.h . (dos freundlich;))

%Vor%

Einfach

Überprüfen Sie auch die Dokumentation von Borland

    
gldraphael 24.09.2012 01:16
quelle
0

ia16-elf gehostet auf Linux oder Windows hat GCC 6.2, um .COM-Dateien zu verlinken. (Es hostet auf Mac mit Winery und MinGW für eine Bash-Shell und extrahieren das Windows-Archiv).

Verwenden Sie DosBox (oder Boxer auf dem Mac), QEMU, VirtualBox zum Testen, und starten Sie keine echte physische Maschine, die Ihnen wichtig ist.

    
Barry 01.10.2017 03:42
quelle

Tags und Links