我正在尝试使用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, ®s, ®s);
size = regs.x.ax;
printf("Memory size is %d Kbytes", size);
}
编译器说它无法找到dos.h或conio.h,显示致命的错误通知。我想知道这是什么原因以及如何处理它。
答案 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()
。