[英]compiling a program to run in DOS mode
我寫了一個簡單的程序,在DOS模式下運行。 一切都在Win XP / Vista / Seven中的模擬控制台下運行,但不在DOS中。 錯誤說: this program caonnot be run in DOS mode
。 我想知道編譯器標志或更大的問題。
對於編程,我使用Code :: Blocks v 8.02進行編譯設置:
-Wall -W -pedantic -pedantic-errors
在Project \\ Build options \\ Compiler settings中
我嘗試了一個干凈的DOS模式,從CD啟動,並在虛擬機中設置DOS。 出現相同的錯誤。
我應該打開更多的編譯器標志嗎? 一些特定的386/486優化?
UPDATE
好的,我已經下載,安裝和配置了DJGPP。 甚至解決了libs和包含的一些問題。 還有兩個問題。
1)我無法編譯調用_strdate
和_strtime
的代碼,我已經仔細檢查了包含,因為MSDN說它需要time.h
,但仍然錯誤說: _strdate was not declared in this scope
,我甚至試圖添加std :: _ strdate,但是我有4個,而不是2個錯誤
2)第二個代碼是關於gotoxy
,它看起來像:
#include <windows.h>
void gotoxy(int x, int y)
{
COORD position;
position.X = x; position.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), position);
}
錯誤說沒有windows.h,所以我把它放到位,但是有更多的錯誤說windows.h中缺少一些錯誤, 我支持它不起作用因為這個函數嚴格用於windows嗎? 有沒有辦法為DOS編寫類似的gotoxy
?
UPDATE2
1)解決使用time();
而不是_strdate();
和_strtime();
這是代碼
time_t rawtime;
struct tm * timeinfo;
char buffer [20];
time ( &rawtime );
timeinfo = localtime ( &rawtime );
strftime (buffer,80,"%Y.%m.%d %H:%M:%S\0",timeinfo);
string myTime(buffer);
它現在在DJGPP下編譯。
UPDATE3
仍需要使用
- 將其替換為其他編譯的代碼(在DJGPP下)。 gotoxy
解決代碼
感謝大家的幫助。 剛學到一些關於編譯的新東西(標志,舊的IDE,如DJGPP,OpenWatcom)和刷新的內存設置DOS工作: - )
從事物的聲音來看,您目前正在編譯Windows控制台程序。 即使它是一個控制台程序,它仍然需要Windows運行。
要編譯一個程序以在真正的DOS上運行,你需要找到一個(可能真的很舊的)編譯器和(特別是)目標DOS的鏈接器並且可以生成DOS MZ可執行文件。 最后一個針對MS-DOS的Microsoft編譯器是VC ++ 1.52c。 如果內存服務,Borland繼續在稍后的目標DOS上,通過像Broland C ++ 5這樣的東西。
我相信如果您查看Digital Mars網站,他可能仍然有一個針對DOS的C ++編譯器。 否則,你將被困在尋找使用過的東西並且很老了。
編輯:看其他答案讓我想起了DJGPP和OpenWatcom。 我很抱歉以前沒有提過它們。
請注意,從C ++的角度來看,Borland和Microsoft實際上都是舊的編譯器 - 它們根本不做命名空間,模板支持從微軟編譯器中不存在到Borland中的平庸。 DJGPP基本上是一個DOS擴展器,gcc已被移植到其中; 它過時(或現代)的程度將取決於涉及哪個版本的gcc。 如果我沒有弄錯的話,Digital Mars編譯器比Borland編譯器更現代,但是Walter Bright現在大部分時間都花在D而不是C ++上,所以C ++編譯器並沒有真正與gcc或MSVC競爭,更不用說基於EDG前端的Comeau或Intel。
在這里一覽: MinGW編譯為MS DOS
基本上,使用DJCPP作為Code :: Blocks的后端。
使用conio.h庫中的gotoxy 。 (dos友好;))
#include <conio.h>
#include <stdio.h>
void main()
{
gotoxy(5,5);
printf("Printing at (5,5)");
}
簡單
我習慣使用DJGPP在普通的ms-dos .. 主頁下編譯東西。
它是一個完全免費的編譯器套件,應該仍然可以無縫工作!
您可以使用DJGPP附帶的conio.h
頭文件中的gotoxy
。
win32 exe中有一個dos stub標頭,在純dos上運行時顯示此消息。 您應該使用dos編譯器(例如turbo c)編譯它,或者如果DOS是代碼塊中的DOS,則提供目標平台。 它的軟件問題不是硬件平台。
在Linux或Windows上托管的ia16-elf具有GCC 6.2以鏈接.COM文件。 (它使用Winery和MinGW在Mac上托管bash shell並解壓縮windows存檔)。
使用DosBox(或Mac上的Boxer),QEMU,VirtualBox進行測試,而不是重新啟動您關心的真實物理機。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.