GNUWin32和Cygwin之间的区别

28

我似乎无法理解这两者之间的区别。

看起来(GNUWin32)是Windows上的一个层(就像MSYS),而另一个(cygwin)则不同(?)。

那是什么意思?什么时候使用其中之一?它们都适用于相同的事情吗?

我想主要用于git,但希望保持我的学习和执行所有*nixy事物的选择。

是否有另一种工具可供使用? msysgit是否更适合此目的?是否有任何资源详细介绍所有这些*nix平台的差异?


1
有人知道在Windows 7之后GNUWin32的状态如何吗?我现在使用的是Windows 10。我想发一个单独的问题,但我觉得它会被关闭,因为不是一个编程问题。 - Sridhar Sarnobat
2个回答

43

Cygwin是一个库,旨在使UNIX程序能够在Windows系统上编译和运行,最少或无需修改,并提供一套使用此库编译的综合包 UNIX 工具和应用程序。它几乎是Windows的完整封装,包括X服务器和您可以在Linux发行版中找到的许多程序。这非常适合想要在Windows上学习或使用UNIX命令行的人。

MSYS主要是将构建GNU风格软件包(带有configure等)所必需的UNIX工具移植到Windows系统中,使用MinGW编译器。它使用了Cygwin库的变体,为了效率而牺牲了一些兼容性,更加友好于 Windows。

GnuWin32仅是将一些GNU工具移植到Windows上的端口。与MSYS一样,它使用msvcrt.dll以及额外的库来提供一些UNIX兼容函数。它的主要目的似乎是允许Windows程序和批处理文件直接使用一些GNU程序和库。

它们大多数都在Windows上提供UNIX程序,但包括以下许多微妙的差异:

  • 意图不同。Cygwin适用于想要在其Windows操作系统上使用UNIX的人。MSYS适用于使用GNU / UNIX构建工具构建Windows程序的人。GnuWin32是将个别GNU程序和库移植到Windows上的端口。
  • 文本文件,特别是行结束符。Cygwin允许您使用CR / LF或LF。MSYS期望LF行结束符。GnuWin32程序期望CR / LF行结束符。
  • 提供的程序。特别是,Cygwin有更多的软件包,而GnuWin32不提供任何shell。

关于git,它可以在Cygwin中使用 - 这个版本可以在Windows目录下使用(可以在/cygdrive下访问)。另外,正如提到的那样,还有msysgit


3
关于MSYS的说法是不正确的。MSYS程序基于MSYS DLL,它是Cygwin DLL的一个分支,并使用特殊的MSYS工具链构建,而不是MinGW工具链。然而,MSYS的目的是为了提供一个类Unix环境来使用MinGW工具链构建本地的Windows程序。 - ak2
4
太棒了!Gow 有什么作用? - qwertymk
@ak2的答案已经修正。一直没有时间去双重检查MSYS使用了哪些库,感谢提供信息。 - Michael Slade
3
多年来我一直喜欢并使用cygwin,但也必须注意某些陷阱。一个例子是:我已经安装了包括git在内的所有cygwin组件,并将其加入到我的用户路径中。然后我安装了ruby(Windows安装程序),并不是从cygwin中安装的(甚至不知道是否有可用的版本)。但是当ruby尝试使用cygwin中的git进行操作时,路径级别出现问题,因为ruby和cygwin的路径处理无法协同工作。解决方法是:将cygwin从用户路径中删除,使用msysgit安装程序,并更加仔细地观察我的用户搜索路径中有哪些内容。 - mark
@mark 相同的情况现在也发生在 Chocolatey 上。 - Brethlosze
显示剩余2条评论

1

Michael Slade是正确的。我想谈一下典型的使用环境。

出于实际原因,我使用gnuwin作为轻量级后端,仅与POSIX环境有关的东西,而cygwin则更像是一个完整的POSIX环境,甚至是非常类Unix的环境。

此外,当安装大量工具时,gnuwin往往会变得臃肿,因为可执行文件经常使用静态链接库。另一方面,Cygwin提供了大量动态库和相对较小的可执行文件。因此,如果您只需要少量可执行文件,则gnuwin需要更少的资源。如果需要复杂的环境,则cygwin将更有效。

gnuwin也经常略微过时,提供少量软件,没有软件包/更新管理器。它是一个基本的shell环境。没有ssh,没有gcc,vim,没有perl,没有sql——您可以从其他来源获取这些内容,但这些内容如何合作很难预测。Cygwin解决了以上所有问题。

换句话说,gnuwin非常适合偶尔的安装程序,只需将du、find和sort放入$PATH中即可。要进行一些真正的POSIX工作,请使用cygwin。

我曾经有一台第二台Linux工作站,然后在我的Windows系统旁边运行了一个Linux虚拟机。Cygwin使它们过时了。与专用计算机或虚拟机相比,它足够好用,可以完成大量的任务,同时节省大量资源。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接