Windows 下的 Linux环境
概述
主要是两个派系:mingw和cygwin
mingw:看官网就可以知道是干啥的了“GCC for Windows 64 & 32 bits”,也就是说mingw只是在Windows下把gcc的代码编译了个gcc.exe出来,让我们在Windows上也可以用gcc编译c代码
实际上mingw也移植了一些其他工具到Windows上,这些工具和gcc打包起来(包括一个模拟终端),取了个名字叫“mingw”
cygwin:cygwin则是给让很多Linux可以用的工具软件在Windows上用,但是它依赖一个cygwin1.dll(把Windows api包装成linux api)
简单总结:
cygwin编译得到的程序需要依赖cygwin的dll才能运行。
mingw编译的到得程序在win32下直接可以运行。
原理:
cygwin是做了一层系统api的包装,转换win api成unix api,这些api就在cygwin1.dll中。所以编译器和程序调用不知道自己在unix环境下还是win环境下。
mingw则是修改了编译器,gcc但凡是要去调用unix api的地方都做了转换,去调用win api。所以mingw编译得到的exe可以直接在win环境里运行。
历史演变
主要是mingw:
mingw32(msys) -> mingw64 -> msys2
最早是mingw32,因为不支持64位系统后来出了mingw64,再后来因为更新拖沓,又有一些人fork了mingw64做了更新的msys2.
msys2更像是集成了mingw32、mingw64、cygwin的优点的东西,后边细讲。
cygwin则是并没有这么复杂的演变。
各安装目录
mingw系:
为什么还有git?因为git实际上是一个命令行工具,而为了方便git直接给了我们一个mingw64的环境,里面附带了一些linux下常用的工具。所以这里的git也算mingw64.
mingw32、mingw64的安装目录下,都有个bin文件夹,这里是一些linux里的工具,都是exe结尾。
例如上图的gcc,我们就可以用它来编译c代码,得到的EXE可以直接在Windows任意地方运行。
但是编译器不只有gcc,还有clang等其他,mingw64这里是没有的,而且mingw64安装软件也略麻烦。
msys2刚好解决了上述所有问题,msys2支持这么多类型编译器:
mingw64/32
是gcc编译器链接msvcrt得到的(msvcrt
+ libstdc++
+ gcc
)
ucrt64
是gcc编译器链接到ucrt得到的(ucrt
+ libstdc++
+ gcc
)
clang64
则是ucrt与clang(ucrt
+ clang
+ libc++
)
msys
这个与以上三个不一样,非原生Windows。而是与cygwin类似,需要依赖msys-2.0.dll
才能准确执行
cygwin:
cygwin最大的特点是完整的linux api封装,基本上在这里能跑的代码,换到linux上直接编译就可以。但是有个问题,那就是任何用cygwin的编译器得到的exe,都要依赖于cygwin1.dll这个文件,因为api的封装就在这里。
单独说下msys2
安装完之后有这么多入口
分别对应的进入不同的编译系列,msys2支持如下这些编译系统
怎么选
首选msys2
怎么安装特定版本gcc
mingw64
msys2
可以去他的仓库下载不同版本的msys2,每年都会发布几个msys2版本,每个版本对应的gcc版本是不一样的
两类软件
终端模拟器
毕竟已经是gui操作系统,在没有gui的时代的那种命令行终端都是gui模拟出来的,powershell ,windows terminal ,mintty,cmder都是终端模拟器。
mingw32、mingw64、cygwin默认用的都是mintty,这个性能还是很好的。
mintty的配置文件在 ~/.minttyrc
Columns=150
Rows=50
FontHeight=14
Font=Consolas
Term=xterm-256color
Scrollbar=none
AllowBlinking=yes
ForegroundColour=171,178,191
BackgroundColour=30,33,39
CursorColour=97,175,239
BoldBlack=92,99,112
Black=92,99,112
BoldRed=224,108,117
Red=224,108,117
BoldGreen=152,195,121
Green=152,195,121
BoldYellow=209,154,102
Yellow=209,154,102
BoldBlue=97,175,239
Blue=97,175,239
BoldMagenta=198,120,221
Magenta=198,120,221
BoldCyan=86,182,194
Cyan=86,182,194
BoldWhite=171,178,191
White=171,178,191
BoldAsFont=yes
CursorType=block
ThemeFile=nord
unix shell
是一个命令行解释器,为Unix操作系统和Unix的系统提供传统的用户界面(命令行界面)。 用户通过输入命令行以获取命令行解释器的文本来指导计算机的操作或通过创建一个或多个此类命令的文本脚本。
bash、zsh、sh等都是一些shell,多数linux默认是bash。
一些特性
除了git,mingw和cygwin默认都不是Windows系统全局的环境变量,私有化更安全,毕竟装好几个这样的环境,如果都是全局环境变量,调用gcc的时候怎么确定是你想要的那个。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现