当前位置: 首页 > news >正文

Cygwin是什么?是Windows还是Linux?

原文作者:gentle_zhou

原文链接:https://bbs.huaweicloud.com/blogs/408674


最近在和客户交流的时候,一直以为客户的研发环境就是windows 7,直到和对面的研发团队交流的时候,得到的反馈是在windows 7系统上安装了Cygwin,和仅仅是Windows系统并不一致。

image.png

那么什么是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标准和扩展。

参考链接

  1. 云社区-华为云
  2. https://www.cygwin.com/
  3. https://en.wikipedia.org/wiki/Linux_distribution
http://www.lryc.cn/news/152252.html

相关文章:

  • 成集云 | 多维表格自动化管理jira Server项目 | 解决方案
  • 数据结构(Java实现)-排序
  • C++------vector【STL】
  • Matlab(变量与文本读取)
  • WebGPU学习(8)---使用RenderBundle
  • 【前端】常用功能合集
  • chatgpt谈论日本排放污水事件
  • Linux 查看当前目录大小
  • 操作系统备考学习 day1 (1.1.1-1.3.1)
  • HTTP:http上传文件的原理及java处理方法的介绍
  • [实习笔记] 字符串练习 (将大量的字符串用int值编码,然后通过int值二分快速查找某个字符串)
  • EMC VNX2代一键关机方法
  • 提升系统管理:监控和可观察性在DevOps中的作用
  • IIS搭建本地电脑服务器:通过内网穿透技术实现公网访问的步骤指南
  • Linux系统中驱动入门设备树DTS(经典)
  • 关系型数据库与非关系型数据库类比
  • Ubuntu入门03——Ubuntu用户操作
  • 输出图元(四)8-1 图元、屏幕坐标、指定二维世界坐标系统
  • 机器学习---决策树的划分依据(熵、信息增益、信息增益率、基尼值和基尼指数)
  • java解析json
  • PAT 1163 Dijkstra Sequence
  • 嵌入式学习之进程
  • C#-单例模式
  • WSNs 安全技术
  • H5如何做页面下拉刷新和上拉加载
  • Camunda 7.x 系列【42】事件子流程
  • JVM类的加载过程
  • Jmeter如何设置中文版
  • flutter自定义按钮-文本按钮
  • 无涯教程-Android - CheckBox函数