免责声明
有部分内容是机翻的,想看省流版本的去到结尾
写在前面
因为最近闲的没事干,笔者准备写个小脚本来爬蔚蓝档案吧的二创贴,顺便做个监控和排名。但是,当笔者准备打开命令行,新建虚拟环境的时候,发现copy出来的是3.11.7,如果我没记错的话,我的python是跟着winget更新的,最新的应该是3.12.1,虽然就一个小小的版本的区别,我就很奇怪了,在命令行里面where python
|
|
这就有点意思了,msys2里也装了一个,但我印象里面我也没用过msys2装过python啊,合着上次装工具链的时候一起装的?不过我之前一直用另一台电脑,还真没留意这个东西。
这不是什么大的问题,真正的问题是,Windows下面的环境变量管理实在是逆天,别的系统都是用户配置优先的,到了Windows就是反过来的,系统配置优先?我TM,用户配置里面,我自己装的在msys2的上面,但是,系统配置里面是没有我自己装的,这就引发出个问题,我到底是把用户目录下面的加到系统配置里面呢?还是把python拷贝到其他地方去?如果是第一种方案,就会导致环境配置混乱,第二种方案,不方便更新。可见,Windows下面的运行环境简直就是依托答辩,各种东西到处乱飞。
因为笔者主要还是使用Linux较多,所以决定看看msys2好不好用,看看能不能替代其他玩意作为包管理器和管理运行环境。
简介
msys2的官方网站上面说的很明白,Windows上的软件分发和构建平台,包含了很多的库和工具,有一个bash终端,和arch一样的pacman包管理器,一些从cygwin项目移植过来的unix工具,还有很多基于Windows的原生预构建软件包,包括了常用的运行环境和工具。
当然,笔者认为以上这对废话初学者大概率都看不懂,简而言之,msys2项目就是让很多的unix软件可以在Windows上运行,或者说将unix软件移植到windows上,并且让你在命令行里面可以用unix的习惯写命令。
安装
翻译并精简自官方文档
-
下载 安装包 msys2-x86_64-20240113.exe (系统需要64位 版本8.1以上) 这里笔者要提一嘴,这个安装包是写这篇文章时官方给出的最新的,如果以后官方更新了,你用旧的安装包也是没有问题的,在安装完之后可以手动对核心组件进行更新,而且每次检查更新时都会更新核心组件。
-
双击运行安装,然后全部默认,下一步,直到完成。

-
现在msys2已经准备就绪,并且会启动一个
ucrt64环境的终端。
-
现在你就可以安装各种工具比如
mingw-w64 gcc来编译项目,我们来尝试一下。-
输入以下命令安装gcc
1pacman -S mingw-w64-ucrt-x86_64-gcc -
终端会显示以下内容,按下
回车键或者输入y后回车表示继续安装1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20resolving dependencies... looking for conflicting packages... Packages (15) mingw-w64-ucrt-x86_64-binutils-2.41-2 mingw-w64-ucrt-x86_64-crt-git-11.0.0.r216.gffe883434-1 mingw-w64-ucrt-x86_64-gcc-libs-13.2.0-2 mingw-w64-ucrt-x86_64-gmp-6.3.0-2 mingw-w64-ucrt-x86_64-headers-git-11.0.0.r216.gffe883434-1 mingw-w64-ucrt-x86_64-isl-0.26-1 mingw-w64-ucrt-x86_64-libiconv-1.17-3 mingw-w64-ucrt-x86_64-libwinpthread-git-11.0.0.r216.gffe883434-1 mingw-w64-ucrt-x86_64-mpc-1.3.1-2 mingw-w64-ucrt-x86_64-mpfr-4.2.1-2 mingw-w64-ucrt-x86_64-windows-default-manifest-6.4-4 mingw-w64-ucrt-x86_64-winpthreads-git-11.0.0.r216.gffe883434-1 mingw-w64-ucrt-x86_64-zlib-1.3-1 mingw-w64-ucrt-x86_64-zstd-1.5.5-1 mingw-w64-ucrt-x86_64-gcc-13.2.0-2 Total Download Size: 49.38 MiB Total Installed Size: 418.82 MiB :: Proceed with installation? [Y/n] [... downloading and installation continues ...] -
我们来测试一下
gcc1 2gcc --version gcc.exe (Rev2, Built by MSYS2 project) 13.2.0
-
环境
笔者认为官方文档中,这一篇比较重要,关系到很多东西。
msys2具有很多不同的环境(笔者注:指命令行环境),所以首先你要做的就是选择使用哪一个。不同的环境之间的区别主要是环境变量,默认的编译器/连接器,处理器架构,使用的系统库等等。如果你不确定使用什么,用ucrt64准没错。
补充
你在
应用程序里会看到这几个玩意。
你点进去就会打开一个
终端窗口,粉红色的字就是当前的环境。
MSYS 环境包含基于类 unix/cygwin 的工具,位于 /usr 下,其特殊之处在于它始终处于活动状态。所有其他环境都继承自 MSYS 环境,并在其之上添加各种内容。
例如,在 UCRT64 环境中,$PATH 变量以 /ucrt64/bin:/usr/bin 开头,因此您可以获得所有基于 ucrt64 的工具以及所有 msys 工具。
概览

GCC 还是 LLVM/Clang
这些是用在相应存储库中构建所有包的默认编译器/工具链。
基于GCC的环境:
- 目前已广泛测试/使用
Fortran支持- 虽然
MINGW环境中也存在Clang包,但该包仍然使用GNU 链接器和GNU C++ 库。在某些情况下,Clang也用于构建软件包,例如,上游更喜欢Clang而不是GCC。
基于LLVM/Clang的环境:
- 仅使用
LLVM工具,LLD作为链接器,LIBC++作为C++标准库 Clang提供 ASAN 支持- 对
TLS(线程本地存储)的本机支持 LLD比LD更快,但不支持LD支持的所有功能- 某些工具缺乏与等效 GNU 工具相同的功能
- 支持
Microsoft Windows 10上的ARM64/AArch64架构
MSVCRT 还是 UCRT
这是 Microsoft Windows 上 C 标准库的两个变体。
MSVCRT(Microsoft Visual C++ Runtime)默认在所有 Microsoft Windows 版本上可用,但由于向后兼容性问题一直停留在过去,不兼容 C99 并且缺少一些功能。
- 它不兼容
C99,例如printf()函数系列,但是…… mingw-w64提供了替换函数,使其在很多情况下兼容 C99- 它不支持
UTF-8区域设置 - 与
MSVCRT链接的二进制文件不应与UCRT链接的二进制文件混合,因为内部结构和数据类型不同。(更严格地说,为不同目标构建的对象文件或静态库不应混合。为不同 CRT 构建的 DLL 可以混合,只要它们不共享CRT对象,例如FILE*跨DLL 边界。)同样的规则适用于MSVC编译二进制文件,因为MSVC默认使用UCRT(如果不更改)。 - 可在
Microsoft Windows的每个版本上开箱即用。
UCRT(通用 C 运行时)是一个较新的版本,Microsoft Visual Studio 也默认使用它。它的工作和行为应该就像代码是用 MSVC 编译的一样。
- 在构建时和运行时比
MSVC具有更好的兼容性。 - 它作为
Windows 10或更高版本以及Windows Server 2016或更高版本中操作系统的一部分包含在内。对于较旧的 Windows 版本,您必须明确提供它或取决于安装它的用户。有关这方面的更多信息,请参阅UCRT 部署。
添加到终端
因为笔者只有Windows Terminal,所以只有这个的步骤。
-
打开
终端,在下拉选项卡里找到设置。
-
左下角
打开json文件。
-
在json文件里找到
"profiles"这一行,把配置加到后面补充: 把大括号里面的内容加进去就行。 字体和大小可以在
设置里面调,比较直观。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29"profiles": { "list": [ // ... { "name": "UCRT64 / MSYS2", "commandline": "C:/msys64/msys2_shell.cmd -defterm -here -no-start -ucrt64", "startingDirectory": "C:/msys64/home/%USERNAME%", "icon": "C:/msys64/ucrt64.ico", "font": { "face": "Lucida Console", "size": 12 } }, { "name": "MSYS / MSYS2", "commandline": "C:/msys64/msys2_shell.cmd -defterm -here -no-start -msys", "startingDirectory": "C:/msys64/home/%USERNAME%", "icon": "C:/msys64/msys2.ico", "font": { "face": "Lucida Console", "size": 12 } }, // ... ] }
添加到 IDE
因为笔者只用 VS Code,所以只有这个的。
-
在VS Code的
设置里找到下图的位置。
-
参考下图把这段加进去。
1 2 3 4 5 6 7 8 9 10 11{ "terminal.integrated.profiles.windows": { "MSYS2 UCRT": { "path": "cmd.exe", "args": [ "/c", "C:\\msys64\\msys2_shell.cmd -defterm -here -no-start -ucrt64" ] } } }
包管理
基本的操作和arch上的pacman一样,直接去参考就行。
包名
所有的包都会有一个代表环境的前缀

使用pacboy进行高级搜索
-
安装pactoys
1pacman -S pactoys -
使用
:p来指定环境,例如1pacboy -S x265:u具体的后缀可以使用
pacboy help查看
仓库镜像
笔者查看了配置文件,个人感觉不需要进行干预,因为里面的镜像网站很齐全。
Git 的问题
笔者参考了官方的文档后,msys2中,git目前只提供了cygwin的版本,只能支持标准的的unix路径,而且与Git for Windows相比,性能很差,尤其是大型仓库。官方在积极解决这个问题。
环境变量
这里先说结论,外面可以读到msys2安装的环境,msys2不能读外面的,很正常,比较设计就是这样的。
尾巴
因为众所周知的原因,Windows就是一个以图形化界面为主的系统。基本没什么人用它的命令行,因为所有工作都可以在图形化界面完成。而Linux不一样,它可以在没有图形化环境的情况下正常使用。然后由于众所周知的原因Linux的桌面环境很难用。你说苹果吧,图形化确实有,命令行确实有,就是没有软件支持。最近个人用得比较舒服的就是Chromebook,可以开Linux虚拟机,图形化界面也处理的好。
MSYS2这个项目一开始给我一种很神奇的感觉,首先它这个移植就很离谱,基本部分是基于cygwin。cygwin这个东西很有意思,用一个动态链接库来处理与POSIX系统调用和环境有关的东西,简单来说就是一个API兼容层。兼容层这个东西会影响一点效率,从Git就可以看出来。所以,MSYS2还包括了一系列的原生构建的软件包,真,从源码构建,直接使用Windows API。MSYS2用Pacman作为包管理器,终于解决了Windows上面没有一个像样的包管理器的问题,各种环境终于不是东一个西一个,还附带了一点滚动更新的优点。自带的bash终端就很有Linux的感觉, 要是你愿意,甚至可以用nano来编辑文件,而且终于不用使用逆天的反斜线写路径了。
最后修改于 2025-11-04

