在Windows上运行用Linux编写的C程序

我有我在Linux中编写的C程序,运行得非常好。 现在我想在Windows上运行它。

我如何轻松地在Windows上运行它?

从咖啡 厅和酒吧回答一些问题

Cygwin是尝试在本地Windows进程中模拟(几乎)完整的POSIX执行环境。 它足够完整,足够的Unix应用程序代码只需使用熟悉的./configure && make && make install成语编译和运行即可。 这个技巧是通过提供一个使用Windows API模拟POSIX系统调用的DLL来完成的。 基于此,您将得到一个完整的GCC工具链,bash以及所有常用的命令行工具。 一个缺点是编译的程序依赖于Cygwin DLL,这使得将结果传递给一个没有安装Cygwin并且用户不想使用Unix shell的系统变得非常棘手。

MinGW是GCC工具链的一个端口,可以生成依赖众所周知的(并且与Windows本身一起分发的)MSVCRT.DLL C运行时库的本地Windows应用程序。 它不会尝试模拟POSIX操作系统,但大多数基于标准C库的应用程序通常基本上不会改变。

MSYS是一个编译时环境,它提供足够的Unix工具(包括bash)来经常允许./configure运行,如果项目支持结果,用MinGW的GCC完成构建。 结果是一个本地的Windows可执行文件,它不依赖于任何你不会故意从MSVCRT.DLL中使用的DLL。 尽管MSYS环境本身就是早期版本的Cygwin项目的一个分支,但它主要是用来提供一个类似unix的地方来编译本地Windows应用程序:通常不会基于其运行时环境来构建新的应用程序。

另一种编译Windows的方法是在Linux上使用MinGW交叉编译器。 许多MinGW的核心开发者都是这样工作的,他们在Wine下测试他们的产品,或者在VM或单独的PC上运行Windows。

如果程序有一个GUI组件,那么你可能会有额外的困难。 一些GUI框架可用于Linux和Windows。 Qt , wxWidgets和IUP都在想,但还有其他的东西。

编辑:我已经改进了上面关于MSYS的段落,强调它是为构建作为本地Windows应用程序运行的程序编译时的环境,而不是象Cygwin这样的完整的POSIX环境。

另外请注意,总是有选项将项目移植到Windows开发的更传统的编译器之一。 开放的Watcom,Borland的编译器和微软都有免费的或者廉价的版本,尽管这些版本通常不足以使得开源社区完全开心。

这种方法可能需要更多的努力,因为当您从一个工具链切换到另一个工具链时,Linux环境和Windows环境之间的差异变得更加明显。 对于历史上不像GCC那样完全符合标准的微软编译器来说尤其如此。

最简单的方法是安装Cygwin环境,然后编译它。

最好的方法是使用mingw编译器重新编译。

轻松的方式在cygwin环境下重新编译它。

你到目前为止的答案,重点是在Windows内核上安装GNU操作系统 ; 但是你也可以使用微软的免费软件工具。 如果你想继续在Linux上开发,这个解决方案可能是最有吸引力的,而且在Windows上只做一些移植工作:

微软提供了一个简化版本的开发环境作为免费软件: Visual Studio Express ( 下载 )。 如果你的程序只写文件IO,它可能会编译未修改,因为微软也提供了C标准库。

对于GUI我也全心全意推荐Qt框架。 这是非常好的书面和文件记录; 现在它是根据LGPL许可的,所以你可以把它链接到专有的应用程序没有任何代价。 但是它是用C ++编写的,所以你需要改变编程语言。 对于QT与Visual Studio Express的集成:我相信它可行,但是你需要尝试一下。 大约五年前,我为我的雇主测试了(专有)QT和(专业)Visual Studio的集成,并且它工作得很好。