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:
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
Es kompiliert jetzt unter DJGPP.
UPDATE3
Müssen Sie noch einen Code mit lösen - ersetzte ihn mit irgendeinem anderen Code, der kompiliert (unter DJGPP). gotoxy
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: -)
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.
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:
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.
Werfen Sie einen Blick hier: MinGW kompilieren für MS DOS
Verwenden Sie DJCPP grundsätzlich als Back-End für Code :: Blocks.
Sie können gotoxy
von conio.h
header verwenden, das mit DJGPP geliefert wird.
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!
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.
Verwenden Sie die Gotoxy aus der Bibliothek conio.h . (dos freundlich;))
%Vor%Einfach
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.