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

我目前正在使用Windows 8.1并希望安装GCC。 我发现通过MinGW和CygWin(最流行的)可以实现这一点。 现在我介绍了Linux上的Windows子系统(WSL)和Bash在Windows 10上提供的Windows。

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

>     gcc helloworld.c
$     ./a

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

问题2.如果可能的话,哪种方法更适合在Windows上使用GCC。 即,a)MinGW或CygWin b)Windows上的Linux上的Bash。 因为根据我所了解的内容,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 +)通常在MinGW中编译为像在Cygwin中一样容易。

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

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

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

MinGW是“极简主义GNU for Windows”的缩写,是本地Microsoft Windows应用程序的极简主义开发环境。

MinGW提供了一个完整的开源编程工具集,它适合开发本地MS-Windows应用程序,并且不依赖于任何第三方C-Runtime 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编写的应用程序的用户),他们需要类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有什么区别?

链接地址: http://www.djcxy.com/p/95087.html

上一篇: Bash on Ubuntu on Windows (WSL), CygWin, MinGW

下一篇: get element after click on context Menu