在Mac上哪里可以获取windows.h文件?

13

我正在尝试在MacOSX上编译一个最初在Windows操作系统上编写的程序。该程序是一个包含OpenGL API等众多目录和文件的大型C++程序。

编译过程一开始在Mac上遇到了OpenGL的问题,所以我下载了所有OpenGL命令行工具来解决这个问题。但是,正如你所想象的那样,OpenGL下载中的每个C文件都有许多预处理器,其中每个预处理器又需要下载其依赖项。

然而,我还剩下一步关键的步骤:我收到一个致命错误,说找不到windows.h文件。这似乎是Windows系统固有的问题(我的程序庞大的目录列表中找不到windows.h文件),而Mac似乎没有相应的windows.h文件(http://cboard.cprogramming.com/c-programming/96087-windows-h-mac.html)。

我是否无法在Mac上编译此程序,还是可以挽救一些东西?


我建议安装vmware fusion并在其中安装Windows,以便使用windows.h编译您的代码。您可以在Mac中某种程度上包含windows.h,但您永远无法运行代码,因为windows.h是特定于Windows的,并包含与Windows特定的dll和定义相关联的操作系统特定调用和声明。 - Aunn Raza
4个回答

9

你可以做的一件事就是创建一个名为 windows.h 的虚拟文件来满足 #include 指令,然后通过查看编译器错误日志逐个查找缺失的 typedefs、#defines等内容。

Windows.h 是一个庞大的头文件,包含了大约一百个其他的Windows头文件,但是你的程序并不需要所有这些定义。这个假设是建立在你没有直接使用Windows API,只是使用简单的东西如DWORD等情况下。如果你的软件是使用类似GLUT或GLFW的框架构建的,那么完全可能,但是如果你直接与WGL交互,那么你将面临很多工作。


我正在与beGUI进行接口交互,这会有问题吗? - warship
1
@white_rabbit:在 FrameWindow_win32.cpp/h 中,beGUI 框架似乎有一点 Win32 特定的代码。我不熟悉它,无法告诉你是否必须重新编写代码才能在 OS X 上运行它,但是似乎有一个示例使用了 GLUT 来代替 Win32 API(begui\src\begui_glut_example)-该示例应该是可移植的。 - Andon M. Coleman
看起来虚拟文件方法会导致问题:OpenGL似乎使用win32 API:../bcore/src/GL/wglew.h:114:15: error: unknown type name 'WINAPI' - warship
你觉得也许使用GLFW(而不是beGUI)会有帮助吗?或者OpenGL需要Win32 API这一事实是保持兼容性仅限于Windows的原因吗? - warship
OpenGL根本不需要Win32。每个平台都有自己的API来处理OpenGL的窗口,Windows API称为WGL。OS X使用三种不同的API:AGL/CGL/NSOpenGL(它非常混乱)。现在,从您发布的错误来看,似乎beGUI取决于WGL。GLFW不会有这个问题,但它不是一个GUI框架。您是否使用beGUI来完成任何GUI相关操作,还是只是创建一个OpenGL窗口? - Andon M. Coleman
显示剩余4条评论

4

windows.h 是由 Windows SDK 提供的,由 Windows 操作系统本身实现。

你需要重写程序,不使用 Windows APIs。
祝好运。


如果我使用跨平台接口,比如beGUI,你认为上述制作虚拟文件的方法可行吗? - warship
@white_rabbit:只有在您没有使用任何来自windows.h的实际函数时才可以这样做。 - SLaks
好的,看起来OpenGL正在使用win32 API: '../bcore/src/GL/wglew.h:114:15: error: unknown type name 'WINAPI'' 这是一个很重要的问题,不是吗? - warship
我正在考虑从beGUI重写到GLFW?你认为这样做能帮助解决问题吗? - warship
@white_rabbit:OpenGL 不使用 Windows API。但是你提到你下载了许多 OpenGL 的工具和文件。为什么这样做呢?其实你不必这样做。很可能你的问题就出在你这样做的地方。 - datenwolf
显示剩余3条评论

2

你不能在Mac上获得Windows.h,它是针对Windows操作系统特定的。
另一方面,有许多可以替代Windows.h中使用的函数。


0
你可以在MacOS上使用x86_64-w64-mingw32来交叉编译Win32程序。它包含了windows.h。

1
这些程序能在MacOS下运行吗,还是需要将可执行文件复制到Windows机器上并在那里运行? - undefined
@JeremyFriesner 在 MacOS 下无法运行。需要将其复制到 Windows 机器上。 - undefined
这是误导性的;OP想要在他们的Mac上编译,为了Mac。MinGW只能编译为Windows,并且仅限于Windows(这正是MinGW的目的)。所以即使MinGW可以在Mac上用于构建程序,它只能在Windows上运行,因此无法满足OP的需求。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接