我有一个包含标题的c程序。这个程序在windows上正常工作,但在我用以下代码编译代码时在linux上运行:
gcc main.c -Wall -o main
我明白了:
main.c:2:10:致命错误windows.h:没有此类文件或目录编译终止
您是否知道此错误发生的原因以及如何解决?
答案 0 :(得分:5)
问题是您的代码使用windows.h头文件来获取仅限Windows功能的函数声明。这个文件通常不存在于Linux上,因为它的工具链(如GCC)的安装(默认情况下)只包含为Linux编译所需的文件。
您有几个选择:
作为Ed Heal suggested,将代码移植到Linux。这意味着您将删除包含的windows.h,并将使用Windows API的所有函数调用替换为其Linux等效项。这将使您的源代码仅在Linux上运行,除非您可以将依赖于OS的调用重构为与平台无关的代码。一句警告:除非您正在使用的程序是微不足道的,否则这不是一件容易的事。无法保证每个Windows API函数都具有Linux等效功能。
为构建系统安装Windows工具链,其中应包含windows.h,并cross-compile代码。这将导致二进制文件无法在Linux上运行,但将在Windows上运行。
这两个选项之间的中间地点是实际执行这两个选项,并使用conditional compilation允许您有选择地为一个目标或另一个目标进行编译。