Cel*_*tas 18 c++ cygwin mingw compilation
我一直试图了解Cygwin和MinGW究竟是什么,并且发现它非常令人困惑.如果你想用C++编程,你不需要一个C++编译器吗?从我所看到的,似乎他们努力在Windows上提供类似Unix的操作系统,但我没有看到它的重要性.我的意思是有一些原因导致C++无法在Windows上本地编译?我还读到它们包含库,这是因为C++核心语言不支持很多函数所以非常常见的库如此math.h附带吗?
rub*_*nvb 11
这个解释一定会在其他地方写下来,但无论如何......
Cygwin是一个基于Win32 API构建的POSIX兼容运行时.它提供了一个很大程度上兼容的POSIX C库,其中有一种带有包管理器的"Cygwin Distro",它允许你安装大量移植到Cygwin下运行的Unix程序.这些包括Unix shell,GCC(用于Cygwin),X,一堆交叉编译器等......
MinGW(-w64)是提供Free(如公共域)Win32标头和库的项目.您可以将其视为Windows SDK(旧版)中标题和库的免费替代品.这些可以与GCC一起使用.项目和其他第三方都为Windows提供了本机GCC版本,根本不需要Cygwin.这些包可以被视为Windows SDK的"完整"(在MinGW(-w64)完整性的范围内)替代.
请注意,Cygwin还提供了Cygwin到Win32的交叉编译器:它们在Cygwin平台上运行,但生成本机Win32可执行文件.
另一个播放器MSYS是Cygwin的轻量级分支,它只提供最少量的工具来在Windows上运行autotools构建脚本.MSYS必须与本机MinGW(-w64)工具一起使用,它不是Cygwin,你不能轻易扩展MSYS.
因此,"MinGW(-w64)"通常指的是整个Free Windows GNU工具链(本机或运行在Cygwin之上的交叉编译器),尽管严格来说它只是标题和库.
要使用GCC的C++编译器,我建议您使用我的包(创建32位和64位可执行文件)或mingw-builds.或者,您可以安装Cygwin并使用其setup.exe来安装MinGW-w64交叉编译器并从那里使用它,但如果您不需要近乎完美的Unix仿真来构建脚本,我建议不要使用它.
编辑您可能会或可能不会意识到还有另一种替代方案,即旧的Interix,它可以回避Win32子系统并直接在NT内核之上构建.它以Windows Services for Unix或提供Subsystem for Unix Applications(适用于Windows 7和Windows 8及更早版本的Windows).此解决方案适用于Windows Pro/Ultimate版本的客户,并为您提供最接近您将获得的本机Unix支持.哎呀,你甚至可以使用Visual Studio来调试你的Unix软件:)
Emi*_*lia 11
注意:这个答案不是假装详尽无遗,只是想从意识形态定义中对概念进行简单的理解.使用不精确的语言是有意的.所以操作系统大师,请不要指望完美的定义.
差异在于POSIX/UNIX和Windows的根源.
POSIX是一个用于操作系统的编程C接口(其中包括Shell和实用程序).
Unix和更高版本的Linux本身就实现了这样的接口,Windows本身也没有.它有自己的方式来管理操作系统实体(Win32).Mac OS也没有.
GCC是一个在提供POSIX接口的系统上常见的编译器套件.
要在Windows上使用它,你有 - 这一点 - 两个选择:
向Windows添加一个库(代码和标题),将POSIX接口添加到Windows(将POSIX调用转换为Windows调用)并通过编译它们来使用该库来移植所有GNU程序(基于Linux):这就是Cygwin所做的.
重写POSIX程序,使它们内部包含与POSIX-Windows映射相关的所有内容,生成本机Windows可执行文件:这就是MinGW和MSYS的关键所在.
Bot方法具有优点和缺点.简而言之,在Cygwin中,如果在POSIX下编译某些东西,它会在Cygwin下编译(至少在理论上).但结果是在windows下运行的unix外观程序.
在MinGW中,您可以编写本机Windows程序(通过调用本机Win32 C接口),但是您无法编译所有使用Windows中不存在的POSIX功能.最明显的情况是缺少<thread>MinGW 的标准接口和有限的<locale>支持.