windows.h没有这样的文件或目录(在linux上编译c代码)

时间:2016-12-12 22:54:13

标签: c

我有一个包含标题的c程序。这个程序在windows上正常工作,但在我用以下代码编译代码时在linux上运行:

gcc main.c -Wall -o main

我明白了:

main.c:2:10:致命错误windows.h:没有此类文件或目录编译终止

您是否知道此错误发生的原因以及如何解决?

1 个答案:

答案 0 :(得分:5)

问题是您的代码使用windows.h头文件来获取仅限Windows功能的函数声明。这个文件通常不存在于Linux上,因为它的工具链(如GCC)的安装(默认情况下)只包含为Linux编译所需的文件。

您有几个选择:

  1. 作为Ed Heal suggested,将代码移植到Linux。这意味着您将删除包含的windows.h,并将使用Windows API的所有函数调用替换为其Linux等效项。这将使您的源代码仅在Linux上运行,除非您可以将依赖于OS的调用重构为与平台无关的代码。一句警告:除非您正在使用的程序是微不足道的,否则这不是一件容易的事。无法保证每个Windows API函数都具有Linux等效功能。

  2. 为构建系统安装Windows工具链,其中应包含windows.h,并cross-compile代码。这将导致二进制文件无法在Linux上运行,但在Windows上运行。

  3. 这两个选项之间的中间地点是实际执行这两个选项,并使用conditional compilation允许您有选择地为一个目标或另一个目标进行编译。