mingw和cygwin区别

本文对比了MinGW和Cygwin这两种用于Windows平台的开发工具。MinGW通过直接替换Linux API为Windows等效API的方式编译程序,而Cygwin通过cygwin1.dll实现了跨平台API转换。MinGW编译的程序性能更高,但Cygwin提供了更完整的Linux环境。


minGW与cygwin

==========================

首先MingW和cygwin都可以用来跨平台开发。  

MinGW是Minimalistic GNU for Windows的缩写,也就是Win版的 精简的GCC 。  

MinGW 收集了一系列免费的Windows 使用的头文件和库文件;同时整合了GNU( http://www.gnu.org/ )的工具集,特别是GNU 程序开发工具,如经典gcc, g++, make等。

Microsoft的有一套unix的子系统的开发环境,不过只是一个posix子集,linux的许多函数不能用,当然fork没问题。

Cygwin则是 全面模拟 了Linux的接口,提供给运行在它上面的的程序使用,并提供了大量现成的软件,更像是一个平台。  

相对的MingW也有一个叫MSYS(Minimal system)的子项目,主要是提供了一个模拟Linux的Shell和一些基本的Linux工具。因为编译一个大型程序,光靠一个GCC是不够的,还需要有Autoconf等工具来配置项目,所以一般在Windows下编译Linux下的大型项目都是通过MSYS来完成的,当然MSYS只是一个辅助环境,根本的工作还是MingW来做的。

用MingW和cygwin编译出来的程序的区别

===================================  

首先,MingW和cygwin都不能让Linux下的程序直接运行在Windows上,必需通过源代码重新编译。  

现代操作系统包括Windows和Linux的基本设计概念像进程线程地址空间虚拟内存这些都是大同小异的,之所以二者上的程序不能兼容,主要是它们对这些功能具体实现上的差异,

首先是可执行文件的格式,Window使用PE的格式,并且要求以.EXE为后缀名。Linux则使用ELF。

其次,操作系统的API也不一样,如Windows用CreateProcess()创建进程,而Linux使用fork()。

所以要移植程序必然要在这些地方进行改变,

MinGW的方案:

来把代码中Linux下的系统调用API直接 替换 修改成对应的Windows下的API。所以生成的执行文件已经 看不到linux的系统调用api 。

Cygwin方案:

Cygwin通过 cygwin1.dll 这个动态库 实现两个平台API的转换 。Cygwin生成的程序依然有fork()这样的Linux系统调用API, 只不过在cygwin1.dll实现到Windows功能的转换。

 

用Mingw编译的程序性能会高一点,而且也不用带着那个接近两兆的cygwin1.dll文件。

【综上所述】

1.修改编译器,让window下的编译器把诸如fork的调用翻译成等价的形式--这就是mingw的做法.

2.修改库,让window提供一个类似unix提供的库,他们对程序的接口如同unix一样,而这些库,当然是由win32的API实现的--这就是cygwin的做法.


MinGW Cygwin 都是 Windows 下用于支持类 Unix 开发环境的工具链,它们在设计目标实现机制上有所不同,但两者可以在同一系统上同时安装并共存[^1]。 ### 安装与共存的可能性 1. **独立安装路径** MinGW Cygwin 在安装时通常会使用不同的目录结构,例如 MinGW 默认安装在 `C:\MinGW` 或 `C:\Program Files\MinGW`,而 Cygwin 通常安装在 `C:\cygwin` 或 `C:\cygwin64`。这种独立的目录结构避免了文件冲突,使得两者可以同时存在于同一系统中[^3]。 2. **环境变量配置** 在配置系统环境变量时,需要谨慎处理 `PATH` 设置,避免两者工具链的可执行文件(如 `gcc` 或 `make`)发生冲突。可以通过分别设置独立的环境变量或使用不同的命令行工具来区分两者的使用场景[^2]。 ### 功能与适用场景 1. **MinGW 的特性** MinGW 主要提供 GCC 编译器 GNU 工具链,支持 Windows 原生 API 的开发。它生成的程序无需依赖额外的 DLL 文件即可直接运行在 Windows 上,适合需要与 Windows 平台紧密集成的项目[^4]。 2. **Cygwin 的特性** Cygwin 提供了一个完整的类 Unix 环境,包括 POSIX API 的实现。通过 Cygwin 编译的程序需要依赖 `cygwin1.dll` 运行库,适合需要在 Windows 上运行 Linux 程序或需要 POSIX 支持的项目[^1]。 ### 使用建议 - **开发工具的选择** 如果需要同时使用 MinGW Cygwin,可以通过不同的开发工具或构建系统(如 CMake)来管理两者的配置。例如,在 CLion 中可以分别配置 MinGW Cygwin 的工具链路径,确保项目构建时使用正确的编译器库[^5]。 - **资源占用与性能** MinGW 生成的程序通常更轻量,因为它们直接依赖 Windows 原生运行库。而 Cygwin 的程序由于需要加载 `cygwin1.dll`,可能会有额外的性能开销。在资源敏感的环境中,应根据需求选择合适的工具链[^2]。 ### 示例:CMake 配置 MinGWCygwin 在 CMake 中,可以通过指定工具链文件来区分 MinGW Cygwin 的构建环境: ```cmake # MinGW 工具链配置 set(CMAKE_C_COMPILER "C:/MinGW/bin/gcc.exe") set(CMAKE_CXX_COMPILER "C:/MinGW/bin/g++.exe") ``` ```cmake # Cygwin 工具链配置 set(CMAKE_C_COMPILER "C:/cygwin64/bin/gcc.exe") set(CMAKE_CXX_COMPILER "C:/cygwin64/bin/g++.exe") ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值