【发布时间】:2010-08-13 07:16:01
【问题描述】:
我有我在 Linux 中编写的运行良好的 C 程序。现在我想在 Windows 上运行它。
如何在 Windows 上轻松运行它?
【问题讨论】:
-
它是否包含任何特定于 Linux 的代码?还是只使用 C 标准库和 POSIX API?
我有我在 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 应用程序运行的程序,而不是一个完整的 POSIX 环境像 Cygwin。
另外请注意,始终可以选择将项目移植到用于 Windows 开发的更传统的编译器之一。 Open Watcom、Borland 编译器和 Microsoft 都有免费或廉价版本,尽管通常没有获得让开源社区完全满意的许可证。
这种方法可能需要更多的努力,因为当您从一个工具链切换到另一个工具链时,Linux 环境和 Windows 环境之间的差异会变得更加明显。对于 Microsoft 编译器来说尤其如此,它们在历史上不像 GCC 那样完全符合标准。
【讨论】:
最简单的方法是安装Cygwin环境,并在该环境下编译。
【讨论】:
最好的方法是使用 mingw 编译器重新编译它。
在cygwin环境下重新编译的简单方法。
【讨论】:
目前得到的答案,重点是在Windows内核上安装GNU operating system;但您也可以使用 Microsoft 的免费软件工具。如果您想继续在 Linux 上进行开发,并且只为 Windows 上的移植做一点工作,那么这个解决方案可能是最有吸引力的:
Microsoft 以免费软件的形式提供其开发环境的简化版本:Visual Studio Express (download)。如果您的程序仅文件 IO,它可能会在未修改的情况下编译,因为 Microsoft 也提供 C 标准库。
对于 GUI,我也全心全意地推荐 Qt 框架。它写得很好,有据可查;它现在在LGPL 下获得许可,因此您可以将其链接到专有应用程序而无需任何费用。但是它是用 C++ 编写的,因此您需要更改编程语言。对于 QT 与 Visual Studio Express 的集成:我相信它可以工作,但您需要尝试一下。大约五年前,我为我的雇主测试了(专有)QT 和(专业)Visual Studio 的集成,它运行良好。
【讨论】: