原文作者:gentle_zhou
原文链接:https://bbs.huaweicloud.com/blogs/408674
最近在和客户交流的时候,一直以为客户的研发环境就是windows 7,直到和对面的研发团队交流的时候,得到的反馈是在windows 7系统上安装了Cygwin,和仅仅是Windows系统并不一致。
那么什么是Cygwin?
Cygwin是一个支持在Windows平台上运行的Unix环境,它最早的版本于1995年10月发布,最新的一个稳定版本3.4.6则于2023年2月14日发布。其目标是让Windows用户可以使用GNU和开源工具,如bash, gcc, less等。但是,Cygwin并不是一个支持运行原生Linux应用或者让Windows应用感知Unix功能的工具;它实际上是一个大型的GNU和开源工具集合,支持在windows上提供类似于Linux distribution 版本的功能(Linux_distribution的目标是让用户在不同的硬件平台上使用类似于Unix的功能和体验),允许用户在Windows系统上运行许多原本只能在Unix或Linux系统上运行的软件。
Cygwin由两部分组成:
- 一个C标准库形式的动态链接库(DLL,dynamic-link library),作为POSIX API的兼容层。
- 一个提供类似unix外观和操作感觉的被广泛使用的软件工具和应用程序集合。
Cygwin的抽象层DLL (cygwin1.dll)用于将部分Posix(可移植操作系统接口(Portable Operating System Interface of UNIX)调用转换成Windows的API调用,让用户可以在Windows系统上编译和运行一些基于Posix标准的源代码,而不需要修改或者重新编写。但需要注意,Cygwin不是一个完全符合Posix标准的环境,它只实现了部分Posix API,并且其中有一些是与Windows系统本身的API有冲突和限制的。同时,因为该DLL需要额外加载,可能会影响Windows系统的性能和稳定性,并且可能会与一些Windows程序产生兼容性问题。
Cygwin环境当前有两个版本;完整的64位版本和精简的32位版本(后者正在慢慢被淘汰)。再深入点说,Cygwin是由一个库和一个GNU开发工具链组成的;这个库实现了POSIX系统调用API的功能,它可以把部分POSIX调用转换成Windows系统调用,从而支持用户在Windows平台上可以运行大量与Unix系统类似的应用程序;而这个GNU开发工具链(包括GCC和GDB)则支持让用户进行软件开发。
在Cygwin上操作与在Windows上操作有什么区别?
- Cygwin提供了一个易用的命令行界面,让用户可以使用Unix风格的命令和脚本来操作文件和程序。而在Windows上操作,通常需要使用图形界面或者PowerShell等工具。
- Cygwin允许用户在Windows系统上运行许多原本只能在Unix或Linux系统上运行的软件,如Perl, Ruby, R等。而在Windows上操作,通常需要安装特定的版本或者使用模拟器等方式才能支持。
- Cygwin提供了一个兼容性层DDL,让用户可以在Windows系统上编译和运行一些基于Posix标准的源代码,而不需要修改或者重新编写。而在Windows上操作,通常需要使用特定的编译器或者修改源代码以适应Windows的API。
- 在两个环境里的编译器也是不同的。在Cygwin中,会提供GNU开发工具链(包括GCC和GDB),用于编译和调试C和C++程序;这些编译器遵循GNU标准和扩展。而Windows提供了Visual Studio等开发工具,用于编译和调试C和C++程序,这些编译器遵循Microsoft标准和扩展。
参考链接
- 云社区-华为云
- https://www.cygwin.com/
- https://en.wikipedia.org/wiki/Linux_distribution