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

Windows上的GCC-Windows上的Ubuntu上的Bash(WSL),CygWin,MinGW,bash,gcc,cygwin,mingw,windows-subsystem-for-linux,Bash,Gcc,Cygwin,Mingw,Windows Subsystem For Linux,我目前正在使用windows 8.1,并希望安装GCC。我发现这样做的方法是通过MinGW和CygWin(最受欢迎的)。 现在我谈到了Windows 10中Windows上提供的Linux Windows子系统(WSL)和Bash 问题1。是否可以在Windows 10中通过Bash安装GCC,以及它是否可以像在Linux发行版上一样工作。 假设你有一个“helloworld.c”文件,如果我有 > gcc helloworld.c $ ./a 在bash中,我将获得输出

我目前正在使用windows 8.1,并希望安装GCC。我发现这样做的方法是通过MinGW和CygWin(最受欢迎的)。 现在我谈到了Windows 10中Windows上提供的Linux Windows子系统(WSL)和Bash

问题1。是否可以在Windows 10中通过Bash安装GCC,以及它是否可以像在Linux发行版上一样工作。 假设你有一个“helloworld.c”文件,如果我有

>     gcc helloworld.c
$     ./a
在bash中,我将获得输出(假设'helloworld.c'的内容很简单-a
cout
station)

问题2。如果可能的话,在Windows上首选哪种方法使用GCC。也就是说,a)MinGW或CygWin b)Bash在Windows上的Linux上运行。 因为根据我所读到的理解,CygWin和MinGW对基于它们开发的程序产生了一些依赖

问题3。如果您已经阅读了本文,请填写我对CygWin和MinGW的理解。也就是说,如果我只将其用于编译和运行代码片段,而不用于应用程序开发,那么我使用哪一个并不重要,对吗?因为代码(用C或FORTRAN编写)将编译并执行相同的代码,而不管系统如何,对吗

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

要回答第一个问题,可以在WSL下编译

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

MinGW源于Cygwin的1.3.3版。[5]虽然Cygwin和MinGW都可以用于将Unix软件移植到Windows,但它们有不同的方法:[16]Cygwin旨在提供一个完整的POSIX层,包括所有主要Unix系统调用和库的完整实现。兼容性被认为比性能更重要。另一方面,MinGW的首要任务是简单性和性能。因此,它不提供某些无法使用Windows API轻松实现的POSIX API,如fork()、mmap()和ioctl()。[16]使用跨平台库编写的应用程序(该库本身已移植到MinGW,如SDL、wxWidgets、Qt或GTK+)通常会像在Cygwin中一样轻松地在MinGW中编译

使用Cygwin编写的Windows程序运行在copylefted compatibility DLL之上,该DLL必须与程序一起分发,并附带程序的源代码。MinGW不需要兼容层,因为基于MinGW的程序是通过直接调用Windows API编译的

()

这就是MinGW网页()所说的:

MinGW是“Minimalist GNU for Windows”的缩写,是一个针对原生Microsoft Windows应用程序的极简开发环境

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

MinGW编译器提供了对Microsoft C运行时和某些特定语言运行时功能的访问。MinGW是一个极简主义者,不会也永远不会尝试为MS Windows上的POSIX应用程序部署提供POSIX运行时环境。如果您想在这个平台上部署POSIX应用程序,请考虑CygWin。 我更熟悉WSL和Cygwin,而不是MinGW。据我所知,MinGW更倾向于生产可移植、高性能的Windows二进制文件,而Cygwin则更倾向于Unix用户(或那些希望移植为Unix/POSIX编写的应用程序的用户),他们希望在Windows下有一个类似Unix的环境,并具有所有的功能。正如您所指出的,Cygwin程序至少过去不太容易分发给未安装Cygwin的其他人(出于许可证方面的考虑,但请参见下面的链接)。MinGW程序使用未记录的Windows本机库作为本机Windows程序运行。WSL二进制文件本身不会在Windows下运行;它们仅在WSL环境(或者可能是本机Linux系统)中运行。WSL将Linux内核调用映射到Windows内核调用,而Cygwin实现Unix/Posix库调用。WSL依赖于一个真正的Linux发行版来提供它的环境,而Cygwin依赖于它自己的环境。(WSL的优势在于它可以运行现有的二进制文件而无需重新编译。)我不认为这对您来说太重要,因为您不打算分发二进制文件。你想要高性能。根据维基百科,MinGW的性能比Cygwin高,但它也是32位的,这可能是应用程序的一个问题。有一个64位的环境类似于MinGW,但它是一个不同的项目

一个重要的考虑因素是您是要编写Windows代码还是Unix/Linux/POSIX代码。MinGW用于使用windowsapi开发Windows应用程序(尽管您可以接受一些有限的POSIX支持);WSL和Cygwin用于开发Unix/Linux/POSIX应用程序。为了便于携带,这很重要。但是如果你在开发这种类型的程序,我想你是的,几乎所有的计算都是直接的,非常简单