Windows上的GCC - Windows上的Ubuntu上的Bash(WSL),CygWin,MinGW

Rit*_*wik 12 bash gcc cygwin mingw windows-subsystem-for-linux

我目前正在使用Windows 8.1,并且正在寻找安装GCC.我发现这样做的方法是通过MinGW和CygWin(最受欢迎).现在我想出了Windows的Windows子系统(WSL)和Windows 10中的Windows上提供的Bash.

问题1.是否可以通过Windows 10中的Bash安装GCC,并且它是否可以像在Linux发行版上那样工作.假设您有一个'helloworld.c'文件,如果我这样做,

>     gcc helloworld.c
$     ./a
Run Code Online (Sandbox Code Playgroud)

在bash中我会得到输出(假设'helloworld.c'的内容很简单 - 一个cout声明.)

问题2.如果可能,那么哪种方法更适合在Windows上使用GCC.也就是说,a)MinGW或CygWin b)Windows上的Linux上的Bash.因为根据我对所读内容的理解,CygWin和MinGW会对它们上面开发的程序产生一些依赖性.

问题3.如果您已经阅读了这篇文章,那么请填写我对CygWin和MinGW的理解上的空白.也就是说,如果我只将其用于编译和运行代码片段而不是应用程序开发,那么我使用哪些内容并不重要,我是对的吗?因为代码(用C或FORTRAN编写),无论系统如何都会编译和执行,我是对的吗?

语境.我是一名从事数值计算(计算流体动力学)的学生,我的主要工作是在FORTRAN开发和运行CFD代码.我想要做的是在我的笔记本电脑上运行计算代码(我们主要使用FORTRAN),它在Windows上运行.我目前不打算为Windows或Linux开发应用程序或软件.但我仍然想知道事情是如何运作的,哪个是最好的选择.请详细解释.谢谢.

eew*_*nco 12

要回答你的第一个问题,是的,你可以在WSL下进行编译.

要回答您的其他问题,让我们来看看MinGW.这就是维基百科MinGW的条目:

MinGW是从Cygwin的1.3.3版本开始的.[5] 尽管Cygwin和MinGW都可用于将Unix软件移植到Windows,但它们有不同的方法:[16] Cygwin旨在提供一个完整的POSIX层,包括所有主要Unix系统调用和库的完整实现.兼容性被认为优先于性能.另一方面,MinGW的优先事项是简单性和性能.因此,它不提供某些POSIX API,这些API无法使用Windows API轻松实现,例如fork(),mmap()和ioctl().[16] 使用自己移植到MinGW的跨平台库编写的应用程序,例如SDL,wxWidgets,Qt或GTK +,通常可以像在Cygwin中一样在MinGW中轻松编译.

用Cygwin编写的Windows程序运行在一个copylefted兼容DLL之上,该DLL必须随程序一起分发,以及程序的源代码.MinGW不需要兼容层,因为基于MinGW的程序是通过直接调用Windows API编译的.

(https://en.wikipedia.org/wiki/MinGW)

这就是MinGW网页(http://www.mingw.org)所说的:

MinGW是"Minimalist GNU for Windows"的缩写,是本机Microsoft Windows应用程序的极简主义开发环境.

MinGW提供了一个完整的开源编程工具集,适用于本机MS-Windows应用程序的开发,并且不依赖于任何第三方C-Runtime DLL.(它确实依赖于Microsoft自己提供的许多DLL,作为操作系统的组件;其中最值得注意的是MSVCRT.DLL,即Microsoft C运行时库.此外,线程应用程序必须附带可自由分发的线程支持DLL,作为MinGW本身的一部分提供).

MinGW编译器提供对Microsoft C运行时功能和某些特定于语言的运行时的访问.MinGW是Minimalist,它不会,也绝不会尝试为MS-Windows上的POSIX应用程序部署提供POSIX运行时环境.如果您希望在此平台上部署POSIX应用程序,请考虑使用Cygwin.

我比MinGW更熟悉WSL和Cygwin.据我所知,MinGW更专注于生成合理的可移植,高性能的Windows二进制文件,而Cygwin更专注于Unix用户(或那些想要移植为Unix/POSIX编写的应用程序的用户),他们想要类似Unix的环境.带有所有装饰的窗户.正如您所指出的,Cygwin程序至少过去不太容易分发给没有安装Cygwin的其他人(由于许可考虑,但请参阅下面的链接).MinGW程序使用未记录的Windows本机库作为本机Windows程序运行.WSL二进制文件本身不能在Windows下运行; 它们只能在WSL环境(或可能是本机Linux系统)中运行.WSL将Linux内核调用映射到Windows内核调用,而Cygwin实现Unix/Posix库调用.WSL依靠真正的Linux发行版来提供它的环境,而Cygwin依赖于它自己的环境.(WSL的优势在于它可以在不重新编译的情况下运行现有的二进制文件.)我不认为这对你来说太重要了,因为你不打算分发你的二进制文件.你想要高性能.据维基百科称,MinGW的性能高于Cygwin,但它也是32位,这可能是你的应用程序的一个问题.有一个类似于MinGW的64位环境,但它是一个不同的项目.

一个重要的考虑因素是您是否要编写Windows代码或Unix/Linux/POSIX代码.MinGW用于使用Windows API开发Windows应用程序(尽管您可以折叠一些有限的POSIX支持); WSL和Cygwin用于开发Unix/Linux/POSIX应用程序.这对于便携性而言至关重要.但是,如果你正在开发我认为你的程序类型,几乎所有的直接计算和非常小的I/O,它可能只是归结为个人偏好或方便.如果您能够提出一个需要花费大量时间并尝试在每个环境下运行的小型代表性程序,您可以找到性能最佳的程序.这取决于我认为你自己的操作组合.

另请参阅Cygwin和MinGW有什么区别?

  • MinGW-w64 在所有意义上都是 MinGW.org 版本的继承者。它们提供 32 位和 64 位编译器,以及一些 arm 支持。它们更好地涵盖了现代 Windows API,包括与 Windows 应用程序相关的内容。我的意思是只使用基于此的工具链,不要浪费时间去弄清楚为什么您的 MinGW 编译器由于某些神秘原因而无法工作。 (3认同)
  • WSL有一个值得注意的重大限制-它仅支持执行64位二进制文​​件,因此,例如,如果您的编译器仅在32位版本中可用,那么您就不走运了 (2认同)