2015-10-17 111 views
-1

我試圖用gcc編譯下面的代碼在Cygwin的64位終端DOS.H和CONIO.H,但似乎無法找到CONIO.HDOS.HCygwin的找不到編譯

#include <stdlib.h> 
#include <dos.h> 

#define MEM 0X12  

main() 
{ 
    struct WORDREGS 
    { 
     unsigned int ax; 
     unsigned int bx; 
     unsigned int cx; 
     unsigned int dx; 
     unsigned int si; 
     unsigned int di; 
     unsigned int flags; 
    }; 
    struct BYTEREGS 
    { 
     unsigned char al,ah; 
     unsigned char bl,bh; 
     unsigned char cl,ch; 
     unsigned char dl,dh; 
    }; 
    union REGS 
    { 
     struct WORDREGS x; 
     struct BYTEREGS h; 
    }; 
    union REGS regs; 
    unsigned int size; 
    int86(MEM, &regs, &regs); 
    size = regs.x.ax; 
    printf("Memory size is %d Kbytes", size); 

} 

編譯器說它無法找到dos.h或conio.h,顯示致命的錯誤通知。我想知道這是什麼原因以及如何處理。

+0

這看起來像是來自16位時代的程序。看看http://stackoverflow.com/questions/5553665/get-ram-system-size – cup

+1

@burdie給我離線指示,我可能過於草率地關閉這個問題。你可以看看下載的mingw-runtime-WHATEVER-VERSION包,找到這些文件,另請參閱https://www.cygwin.com/ml/cygwin/2007-04/msg00180.html我仍然不確信使用這種古老的源文件是有意義的,你應該更好地研究一下找到一個能夠完成你正在尋找的任務的現代工具。 –

回答

1

因爲它們是MS-DOS標題,並且在cygwin中不可用。此外,main()的正確簽名是int main()

2

Cygwin是適用於Windows的Linux環境(請參閱https://cygwin.com)。這可能是主要原因,因爲存在名爲'dos.h'的頭文件。

關於編譯問題,在cygwin郵件列表的郵件存檔(https://www.cygwin.com/ml/cygwin/2007-04/msg00180.html)中解釋了一個解決方案。 看來,dos.h和conio.h(頭文件)是mingw-runtime-WHATEVER.VERSION包的一部分,您可以從cygwin.com下載它(更好地使用cygwin安裝和更新程序setup- x86.exe或setup-x86_64.exe)。

上述郵件中的鏈接已損壞,但您可以在cygwin.com首頁的左側欄上選擇'搜索包'時自行找到該包。然後你可以把'dos.h'或'conio.h'放到輸入框中,點擊'Go'後你會列出所有包含這些頭文件的包。根據上述郵件中的答案,您只需要 mingw-runtime-WHATEVER.VERSION包,您必須下載並安裝它。

安裝該軟件包後,您很可能需要使用 選項'-I'(大寫字母'i'!)和dos.h中的路徑(在引號內!)指示gcc編譯器文件,例如:

gcc program.c -I'C:\cygwin\usr\i686-pc-mingw32\sys-root\mingw\include' 

注意:也許你的系統上的路徑是不同的,尤其是當您正在使用64位Cygwin的工作!與未找到報頭文件

export C_INCLUDE_PATH='C:\cygwin\usr\i686-pc-mingw32\sys-root\mingw\include' 

至少誤差然後消除,但:

代替使用「-I」選項,則可以在終端下面的命令定義一個環境變量可能還有其他錯誤(例如:'int86'的未定義引用?)。