Windows Cygwin和MinGW有什么区别? 我想让我的C++项目跨平台,我考虑使用CygWi/MIW。 但是它们之间有什么区别呢
另一个问题是,我是否能够在没有Cygwin/MinGW的系统上运行二进制文件?Cygwin模拟整个POSIX环境,而MinGW是仅用于编译的最小工具集(编译本机Win应用程序)。因此,如果您想使项目跨平台,那么在两者之间的选择是显而易见的,MinGWWindows Cygwin和MinGW有什么区别? 我想让我的C++项目跨平台,我考虑使用CygWi/MIW。 但是它们之间有什么区别呢,windows,cygwin,mingw,Windows,Cygwin,Mingw,另一个问题是,我是否能够在没有Cygwin/MinGW的系统上运行二进制文件?Cygwin模拟整个POSIX环境,而MinGW是仅用于编译的最小工具集(编译本机Win应用程序)。因此,如果您想使项目跨平台,那么在两者之间的选择是显而易见的,MinGW 虽然您可以考虑在Windows上使用VS,但在Linux / UNICE上使用GCC。大多数开源项目都是这样做的(例如Firefox或Python)。Cygwin使用DLL、Cygwin.DLL(或者一组DLL)在Windows上提供类似POSIX
虽然您可以考虑在Windows上使用VS,但在Linux / UNICE上使用GCC。大多数开源项目都是这样做的(例如Firefox或Python)。
Cygwin使用DLL、Cygwin.DLL(或者一组DLL)在Windows上提供类似POSIX的运行时 MinGW编译为本机Win32应用程序如果您使用Cygwin构建了一些东西,那么安装它的任何系统都将需要Cygwin DLL。MinGW应用程序不需要任何特殊的运行时。Wikipedia会进行比较 来自Cygwin的:
- Cygwin是一个类似Linux的Windows环境。它由两部分组成:一个DLL(cygwin1.DLL),它充当提供大量Linux API功能的Linux API仿真层
- 提供Linux外观的工具集合李>
Cygwin试图在Windows上创建一个完整的UNIX/POSIX环境。为此,它使用各种DLL。虽然这些DLL包含在GPLv3+中,但它们的许可证包含的内容并不强制派生作品包含在GPLv3+中。MinGW是一个C/C++编译器套件,它允许您创建Windows可执行文件,而不依赖于此类DLL—您只需要正常的MSVC运行时,这是任何正常Microsoft Windows安装的一部分 您还可以获得一个类似UNIX/POSIX的小型环境,该环境使用名为的MinGW进行编译。它几乎没有Cygwin的所有功能,但非常适合希望使用MinGW的程序员。是一个类似Unix的环境和Microsoft Windows的命令行界面 是GNU编译器集合(GCC)到Microsoft Windows的本机软件端口,以及一组可自由分发的Windows API导入库和头文件。MinGW允许开发人员创建本机Microsoft Windows应用程序
如果所有必需的库(DLL)都存在,则可以在不使用
cygwin
环境的情况下运行使用mingw
生成的二进制文件。请注意,实用程序的行为在这两种环境之间确实会有所不同
例如,Cygwin tar可以fork,因为DLL中支持fork(),而mingw版本不能。当试图从源代码编译mysql时,这是一个问题。不要忽视AT&t的软件,该软件旨在帮助您在windows上编译Unix应用程序(最新版本-2012-08-06;使用Eclipse公共许可证,版本1.0)
像Cygwin一样,他们必须与图书馆竞争;在它们的情况下,
POSIX.DLL
。AT&T的人都是很棒的工程师(和你一起带来了ksh和ksh),他们的东西值得一看。简单来说,是这样的:
- 在Cygwin中编译一些东西,您就是在为Cygwin编译它
- 在MinGW中编译一些东西,您就是在为Windows编译它
cygwin1.dll提供)。您可以将其与您的软件一起分发,但您的软件必须遵守其开源许可证。即使只是将您的软件与之链接,但单独分发dll,也会对代码施加许可证限制
关于MinGW
MinGW的目标只是成为GNU Windows开发工具的一个端口。它不试图模拟Unix或提供与Unix的全面兼容性,只是提供了一个可以在Windows中本机使用的GNU编译器集合、GNU Binutils和GNU调试器的版本。它还包括允许在代码中使用Windows本机API的头文件
因此,您的应用程序需要使用Windows API专门针对Windows进行编程,如果它是在标准Unix环境中运行并使用Unix特定功能创建的,则这可能意味着要进行重大更改。默认情况下,在MinGW的GCC中编译的代码将编译为本机Windows X86目标,包括.exe和.dll文件,不过您也可以使用正确的设置进行交叉编译,因为您基本上使用的是GNU编译器工具套件
MinGW是在Windows上使用编译器及其相关链接/生成工具的免费开源替代方案。在某些情况下,使用微软可以在没有太多修改的情况下使用Visual C++编写编译的东西。
尽管MingW包含一些头文件和接口代码,允许您的代码与windowsapi交互,就像普通的标准librar一样
#include <sys/stat.h>
#include <stdlib.h>
int main(void)
{
struct stat stbuf;
stat("c:foo.txt", &stbuf);
system("command");
printf("Hello, World\n");
return 0;
}
MinGW (or MinGW-w64) Cygwin
-------------------- ------
Your program written Your program written
for Unix and Linux for Unix and Linux
| |
| |
V V
Heavy modifications Almost no modifications
| |
| |
V V
Compilation Compilation
Program compiled with Cygwin ---> Compatibility layer ---> Windows API
Program compiled with MinGW (or MingGW-w64) -------------> Windows API