Cygwin在编译时找不到dos.h和conio.h

时间:2015-10-17 07:15:24

标签: c cygwin

我正在尝试使用gcc在Cygwin 64位终端中编译以下代码,但似乎无法找到 conio.h dos.h

#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,显示致命的错误通知。我想知道这是什么原因以及如何处理它。

2 个答案:

答案 0 :(得分:2)

Cygwin是适用于Windows的Linux环境(请参阅https://cygwin.com)。这可能是主要原因,因为很好地存在一个名为'dos.h'的头文件。

关于编译问题,在cygwin邮件列表(https://www.cygwin.com/ml/cygwin/2007-04/msg00180.html)的邮件存档中解释了一个解决方案。 dos.h和conio.h(header-files)似乎是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包,您必须下载并安装。

安装该软件包之后,你很可能需要用你的gcc编译器来指示 选项'-I'(大写字母'i'!)和dos.h文件中的路径(在引号内!),例如:

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

注意:系统上的路径可能不同,特别是当您使用64位cygwin时!

您可以在终端中使用以下命令定义环境变量,而不是使用'-I'选项:

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

至少可以消除未找到的头文件中的错误,但可能还有其他错误(例如:对'int86'的未定义引用?)。

答案 1 :(得分:1)

因为它们是MS-DOS标头,并且在cygwin中不可用。此外,main()的正确签名是int main()