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

在Windows上运行用Linux编写的C程序,c,windows,linux,C,Windows,Linux,我有一个用Linux编写的C程序,运行得很好。现在我想在Windows上运行它 如何在Windows上轻松运行它?最好使用mingw编译器重新编译它 最简单的方法是在cygwin环境下重新编译它。最简单的方法是安装环境,并在该环境下编译。详细介绍了来自和的答案 试图在本机Windows进程中模拟(几乎)完整的POSIX执行环境。它已经足够完整,大量Unix应用程序代码只是使用熟悉的/configure&&make&&makeinstall习惯用法编译和运行。这个技巧是通过提供一个DLL来实现的,

我有一个用Linux编写的C程序,运行得很好。现在我想在Windows上运行它


如何在Windows上轻松运行它?

最好使用mingw编译器重新编译它


最简单的方法是在cygwin环境下重新编译它。

最简单的方法是安装环境,并在该环境下编译。

详细介绍了来自和的答案

试图在本机Windows进程中模拟(几乎)完整的POSIX执行环境。它已经足够完整,大量Unix应用程序代码只是使用熟悉的
/configure&&make&&makeinstall
习惯用法编译和运行。这个技巧是通过提供一个DLL来实现的,该DLL使用Windows API模拟POSIX系统调用。在此基础上,您将获得一个完整的GCC工具链、bash和所有常用的命令行实用程序。一个缺点是编译后的程序依赖于Cygwin DLL,这使得将结果交付给尚未安装Cygwin且用户不想使用unixshell的系统变得非常困难

是GCC工具链的一个端口,用于生成依赖于众所周知的(与Windows本身一起分发的)MSVCRT.DLL C运行时库的本机Windows应用程序。它没有试图模拟POSIX操作系统,但是大部分基于标准C库的应用程序通常构建基本不变

是一个编译时环境,它提供了足够的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,所有人都会想到,但还有其他人

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

另外,请注意,对于Windows开发,始终可以选择将项目移植到更传统的编译器之一。openwatcom、Borland编译器和微软都有免费或廉价的版本,尽管往往没有令开源社区完全满意的许可证


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

到目前为止,您得到的答案主要是在Windows内核上安装;但是你也可以使用微软的免费软件工具。如果您想继续在Linux上开发,并且只需在Windows上进行少量移植工作,此解决方案可能最具吸引力:

微软提供了一个简化版的开发环境作为免费软件:()。如果您的程序只执行文件IO,它可能会编译为未经修改的文件,因为Microsoft也提供C标准库


对于GUI,我也衷心推荐该框架。这是非常好的书面和文件;现在,它已根据获得许可,因此您可以免费将其链接到专有应用程序。但是它是用C++编写的,所以你需要改变编程语言。对于QT与visualstudioexpress的集成:我相信它是有效的,但您需要尝试一下。大约五年前,我为我的雇主测试了(专有)QT和(专业)visualstudio的集成,它工作得非常好

@Tanaji:是的,它将生成一个Windows可执行文件。它是否包含任何特定于Linux的代码?或者它只使用C标准库和POSIX API?+1,但您应该提到,MSYS并不是真正用来扩展基于MSYS的用户应用程序的。“Cygwin更好地达到了这个目的。”rubenvb,说得好。我本想让这种区别比今天读到的更清楚,所以我现在试图让它更清楚。