MinGW/cygwin 快速开始

文章目录

    • 一、什么是 MinGW ?
      • 1. 安装 MinGW-w64
    • 二、什么是cygwin
      • 1. Cygwin安装
        • 1.1 安装过程
        • 1.2 验证安装是否成功
        • 1.3 Clion配置使用cygwin
      • 2. Cygwin使用总结
        • 1)Cygwin这个软件,想问下如何在Cygwin中访问windows其他磁盘的文件?
    • 三、Cygwin和MinGW有什么区别?
    • 四、如何选择MingW和cygwin?

一、什么是 MinGW ?

官网: http://www.mingw.org/
MinGW 的全称是:Minimalist GNU on Windows 。它实际上是将经典的开源 C语言 编译器 GCC 移植到了 Windows 平台下,并且包含了 Win32API 和 MSYS,因此可以将源代码编译生成 Windows 下的可执行程序,又能如同在 Linux 平台下时,使用一些 Windows 不具备的开发工具。

一句话来概括:MinGW 就是 GCC 的 Windows 版本 。

  1. MinGW 是开源软件,可以免费使用。
  2. MinGW 由一个活跃的开源社区在持续维护,因此不会过时。
  3. MinGW 支持最新的 C语言 标准。
  4. MinGW 使用 Windows 的C语言运行库,因此编译出的程序不需要第三方 DLL ,可以直接在 Windows 下运行。
  5. 那些著名的开源 IDE 实际只是将 MinGW 封装了起来,使它拥有友好的图形化界面,简化了操作,但内部核心仍然是 MinGW。

MinGW 是稳定可靠的、持续更新的 C/C++ 编译器,使用它可以免去很多麻烦,不用担心跟不上时代,也不用担心编译器本身有严重漏洞,可以放心的去编写程序。

1. 安装 MinGW-w64

  • 打开下载地址:MinGW 进入下载页面
    https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/
    尽量不要使用install在线安装方式(因为慢),
    往下拉,如图,下载标红的 minGW,下载

点击x86_64-posix-sjlj或者x86_64-posix-seh就可以下载了。
在这里插入图片描述

二、什么是cygwin

cygwin官方的一个定义是Cygwin is not a way to run native linux apps on Windows. You have to rebuild your application from source if you want it to run on Windows.

cygwin不是让linux程序能在windows上运行的方法,如果你想要让linux程序能在windows运行,那么你只有用cygwin来重新编译一下源文件。

1. Cygwin安装

手把手的教你在windows上安装cygwin教程以及验证是否安装成功
参考URL: https://blog.csdn.net/qq_39897005/article/details/83787471
参考URL: https://blog.csdn.net/heshushun/article/details/78664384

1.1 安装过程

  1. 官网下载 setup安装文件
    官方下载https://cygwin.com/setup-x86_64.exe 注意64位下载64位cygwin,32位的下载32位的cygwin。cygwin是区分开的。

Cygwin的setup.exe安装文件,但是这个安装文件是属于Linux风格的,跟win下的安装风格不一样,准确的说就是:Cygwin的安装,并不是一键就能安装,他只是一个下载器,包括我之前使用的另一个Linux环境MinGW也是一样,他们都只提供一个下载器,帮咱们去下载他说需要的库文件。需要什么库都可以打开setup.exe去下载。

  1. 运行安装文件,现在在线安装
    在线安装选择镜像如下:
    http://mirrors.163.com/.help/cygwin.html
    http://mirrors.163.com/cygwin/
    http://mirrors.aliyun.com/cygwin/x86_64/release/

在这里插入图片描述3. 选择要安装的模块
选择安装如下基本的模块:

Base,Devel,Libs,Net,System,Utils等这几个最基本的分类下面的模块都选上。

即点击

Base,Devel,Libs,Net,System,Utils

的Default,使其都变成Install即可。

注意:
如下图:我选择的比上面列举的多,下载下来,发现非常占磁盘,光安装包12G,安装自动解压得到安装目录下来竟然80G左右,因此,强烈建议,少选,选自己需要的。
如果不知道怎么选,就选Base,Devel,Libs,Net,System,Utils这几个试试。
在这里插入图片描述

1.2 验证安装是否成功

安装完成后,桌面有个Cygwin64 Terminal,打开

输入 cygcheck -c cygwin
gcc --version
g++ --version
gdb --version
在这里插入图片描述

1.3 Clion配置使用cygwin

如下图:toolchains选择,你的cygwin安装目录即可
在这里插入图片描述

2. Cygwin使用总结

1)Cygwin这个软件,想问下如何在Cygwin中访问windows其他磁盘的文件?

输入 cd /cygdrive/(盘符) 进入相应的分区

三、Cygwin和MinGW有什么区别?

cygwin和mingw的区别
参考URL: https://www.xuebuyuan.com/3243775.html
MingW和cygwin的区别(转)
参考URL: MingW和cygwin的区别(转)

首先MingW和cygwin都可以用来跨平台开发。
MinGW是Minimalistic GNU for Windows的缩写,也就是Win版的GCC。
Cygwin则是全面模拟了Linux的接口,提供给运行在它上面的的程序使用,并提供了大量现成的软件,更像是一个平台。 (简单的说,Cygwin实现了unix系统调用API)

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

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

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

其次操作系统的 API也不一样,如Windows用CreateProcess()创建进程,而Linux使用fork()。
所以要移植程序必然要在这些地方进行改变,MingW有专门的W32api头文件,来把代码中Linux方式的系统调用替换为对应的Windows方式。而Cygwin则通过 cygwin1.dll这个文件来实现这种API的转换,并模拟一个Linux系统调用接口给程序,程序依然以Linux的方式调用系统API,只不过这 个API在cygwin1.dll上,cygwin1.dll再调用Windows对应的实现,来把结果返回给程序。

可以用查看他们编译好的程序的导入表来验证这点。
二者生成的程序都是能在Windows上运行的EXE文件,显然都是PE格式,用一个PE格式查看工具检查一下就能发现,Cygwin生成的程序依然有 fork()这样的Linux系统调用,但目标库是cygwin1。而MingW生成的程序,则全部使用从KERNEL32导出的标准Windows系统 API。
这样看来用Mingw编译的程序性能会高一点,而且也不用带着那个接近两兆的cygwin1.dll文件。
但Cygwin对Linux的模拟比较完整,甚至有一个Cygwin X的项目,可以直接用Cygwin跑X。
另外Cygwin可以设置-mno-cygwin的flag,来使用Mingw编译。
而与Cygwin更有可比性的MSys上的工具也是通过Cygwin这种模拟的方式来提供的。

区别总结:

1.修改编译器,让window下的编译器把诸如fork的调用翻译成等价的形式–这就是mingw的做法.
2.修改库,让window提供一个类似unix提供的库,他们对程序的接口如同unix一样,而这些库,当然是由win32的API实现的–这就是cygwin的做法.

CygWin/gcc与MinGW的最大区别在于:使用CygWin/gcc可以在Windows下调用unix-like的API,(如fork,spawn,signals,select,sockets等)。也就是说Cygwin是运行在Windows下的,但是她使用的是Unix-like系统的函数和思想。由于这个区别,导致的结果就是用CygWin/gcc编译出来的程序可以无缝的运行在*nix环境下。但是如果调用了unix特有的API函数,在windows环境下不能正常运行,如果想在windows下正常运行的,就必须依赖cygwin1.dll,速度上会有些影响。
用MinGW编译出来的程序,如果源代码里面调用了unix环境的API,则MinGW会把这些对UNIX的API调用翻译成win32下等价的形式。同时这个程序是不能在windows下运行的。
说白了,如果你是想在windows环境下开发linux运行程序,那么CygWin/gcc是你的不二之选。
而如果你想开发的是windows运行程序,并且追求速度,那么二者相比而言,MinGW是更好的选择

四、如何选择MingW和cygwin?

如果在windows开发linux程序,cygwin是很好的选择。如果你开发的程序不介意有一个cygwin1.dll的话,也是可以选择cygwin的。

如果你是想开发windows下的程序,还要必须用gcc的话,mingw是很好的一个选择。

总结:
要在Windows中使用GCC跨平台编译器的优势,请使用MinGW。
要利用Windows中的POSIX标准高级编程功能和工具的优势,请使用Cygwin。