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

7

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

如何简单地在Windows上运行它?


1
它是否包含任何特定于Linux的代码?还是仅使用C标准库和POSIX API? - dreamlax
4个回答

28

cafjartieda的回答上稍作解释...

Cygwin是模拟一个(几乎)完整的POSIX执行环境在本地Windows进程中。它足够完整,以至于惊人的数量的Unix应用程序代码只需使用熟悉的 ./configure && make && make install 命令编译并运行。这个技巧是通过提供一个DLL来完成的,该DLL使用Windows API模拟POSIX系统调用。基于此,您可以获得完整的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开发编译器之一。Open Watcom、Borland编译器和Microsoft都有免费或廉价版本,尽管通常不在让开源社区完全满意的许可证下。
这种方法可能需要更多的努力,因为当你切换到另一个工具链时,Linux环境和Windows环境之间的差异变得更加明显。这对于历史上不如GCC符合完全标准的Microsoft编译器尤其如此。

+1,但是你应该提到MSYS并不是为了用基于MSYS的用户应用程序进行扩展而设计的。Cygwin在这方面做得更好。 - rubenvb
@rubenvb,说得好。我本意是要让这个区别比今天读起来更清晰,所以我现在尝试让它更加清晰明了。 - RBerteig

3
最简单的方法是安装Cygwin环境,然后在该环境下进行编译。

2

最好的方法是使用mingw编译器重新编译所有内容。

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


@Tanaji:是的,它将生成一个Windows可执行文件。 - dreamlax

1
到目前为止,你得到的答案都集中在在Windows内核上安装GNU操作系统上;但是你也可以使用Microsoft的免费软件工具。如果您想继续在Linux上开发,并且只想在Windows上进行少量移植工作,则此解决方案可能最具吸引力:
Microsoft提供了其开发环境的简化版本作为免费软件:Visual Studio Express下载)。如果您的程序仅涉及文件IO,则它可能会编译未经修改,因为Microsoft还提供了C标准库。

对于GUI,我也十分推荐Qt框架。它的编写和文档都非常出色;现在它已经根据LGPL许可证授权,因此您可以将其链接到专有应用程序而不需要任何费用。但是,它是用C++编写的,所以您需要更改编程语言。关于将QT与Visual Studio Express集成:我相信它可以工作,但您需要尝试一下。大约五年前,我为我的雇主测试了(专有的)QT和(专业的)Visual Studio的集成,它完美地工作了。


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