GNUWin32和cygwin之间的区别

时间:2012-05-23 02:03:50

标签: linux cygwin msysgit msys gnuwin32

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

似乎一个(GNUWin32)是一个位于窗口顶部的图层(如MSYS)和  其他(cygwin)是别的东西(?)

这是什么意思?我何时会使用一个而不是另一个?他们都适合同样的事情吗?

我想将它主要用于git,但是希望保持我的选择开放以便学习和做所有事情* nixy。

还有其他工具吗? msysgit会更适合这个吗?
是否有任何资源能够详尽地解决所有这些* nix平台的差异?

2 个答案:

答案 0 :(得分:35)

Cygwin是一个库,致力于使UNIX程序能够在Windows系统上进行编译和运行,只需极少或不需要修改,以及使用此库编译的一整套打包的UNIX工具和应用程序。它几乎是Windows的完整包装器。它包括一个X服务器和许多你可以在Linux发行版中找到的程序。对于想要在Windows中学习或使用UNIX命令行的人来说非常棒。

MSYS主要是使用MinGW编译器在Windows系统上构建GNU样式包(带configure等)所需的UNIX工具的一个端口。它使用Cygwin库的一个变体来牺牲一些兼容性以提高效率,并且更适合Windows。

GnuWin32只是Windows的一些GNU工具的端口。与MSYS一样,它使用msvcrt.dll,以及一个额外的库来提供一些UNIX兼容性功能。其主要目的似乎是允许Windows程序和批处理文件直接使用某些GNU程序和库。

在大多数情况下,它们都在Windows上提供UNIX程序,但存在许多细微差别,包括:

  • 意图。 Cygwin适用于希望在Windows操作系统上使用UNIX的用户。 MSYS适用于想要使用GNU / UNIX构建工具构建Windows程序的人员。 GnuWin32是Windows的各个GNU程序和库的端口。
  • 文本文件,尤其是行结尾。 Cygwin允许您使用CR / LF或LF。 MSYS期望LF线结束。 GnuWin32计划期待CR / LF线路结束。
  • 提供的程序。特别是,Cygwin有更多的包,而GnuWin32不提供任何shell。

至于git,可以使用Cygwin - 这个版本可以在Windows目录中使用(可以在/cygdrive下访问)。另外,如上所述,有msysgit

答案 1 :(得分:0)

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

出于实际原因,我将gnuwin用作仅与POSIX环境远程相关的东西的轻量级后端,而cygwin则更像是成熟的POSIX,甚至是一个非常讨厌的环境。

在安装许多工具时,gnuwin也会变得肿,因为可执行文件通常使用静态链接库。另一方面,Cygwin提供了大量的动态库和相当小的可执行文件。因此,如果您只需要几个可执行文件,则gnuwin需要更少的资源。如果您需要复杂的环境,那么cygwin会更高效。

gnuwin通常也有些过时,提供的软件很少,没有软件包/更新管理器。这是一个基本的外壳环境。没有ssh,没有gcc,vim,没有perl,没有sql-您可以从其他来源获得这些信息,但是很难预测它们如何协作。 Cygwin解决了所有上述问题。

换句话说,gnuwin非常适合偶尔使用的安装程序,因为它只将du,查找和排序放在$ PATH中。要进行一些真正的POSIX工作,请使用cygwin。

我曾经有第二个Linux工作站,然后在Windows系统旁边运行一个Linux VM。 Cygwin使它们过时了。与专用计算机或VM相比,这足以处理很多事情,同时节省大量资源。