一、msys2介绍
核心功能与定位:
- 原生 Windows 应用编译: 集成
MinGW-w64
工具链,可直接编译生成原生 Windows 可执行文件(不依赖第三方模拟层),支持 32/64 位架构 - 类 Unix 开发环境: 提供 Bash Shell、GNU 工具集(如
make
,grep
,awk
)、版本控制工具(如 Git)等,支持在 Windows 下运行 Unix/Linux 命令行程序。 - 包管理系统: 移植自 Arch Linux 的
Pacman
包管理器,支持依赖解析、一键安装/更新软件包。官方仓库提供超过 3300 个预编译包(如 GCC、CMake、Python、OpenCV 等)
MSYS2 包含多个子系统:
子系统 | 目标平台 | 编译器 | 运行时库 | 典型用途 | 安装命令(MSYS2 终端) |
---|---|---|---|---|---|
MSYS2 | POSIX 模拟 | GCC (Cygwin) | msys-2.0.dll | Unix 工具移植/包管理 | 基础工具默认安装(无需额外命令) |
MINGW32 | Win32 原生 | MinGW-w64 (i686) | MSVCRT | 32 位 Windows 应用开发 | pacman -S mingw-w64-i686-toolchain |
MINGW64 | Win64 原生 | MinGW-w64 (x64) | MSVCRT | 通用 64 位应用开发 | pacman -S mingw-w64-x86_64-toolchain |
UCRT64 | Win64 原生 | MinGW-w64 (x64) | UCRT | 现代 Windows 应用 | pacman -S mingw-w64-ucrt-x86_64-toolchain |
CLANG64 | Win64 原生 | LLVM/Clang | UCRT/MSVCRT | 高性能/跨语言开发 | pacman -S mingw-w64-clang-x86_64-toolchain |
二、msys2安装
msys2官网地址:www.msys2.org
msys2下载地址:msys2-installer
三、启动msys2
cmd进入msys2解压安装的目录,然后通过下面命令启动程序。
# 进入 mingw32环境
msys2_shell.cmd -mingw32
# 进入 mingw64环境
msys2_shell.cmd -mingw64
四、更换pacman源
配置镜像源 帮助页面:
更换pacman源:
# 替换镜像源
sed -i "s#mirror.msys2.org/#mirrors.ustc.edu.cn/msys2/#g" /etc/pacman.d/mirrorlist*
# 刷新软件包数据
pacman -Sy
五、pacman常见用法
查询有哪些软件可以安装的网站:packages.msys2.org
Pacman 命令速查表:
操作 | 命令 | 场景说明 |
---|---|---|
安装包 | pacman -S 包名 | 基础安装(支持多包空格分隔) |
卸载包(推荐) | pacman -Rs 包名 | 删除包+无用依赖(避免残留) |
系统升级 | pacman -Syu | 必用!同步仓库并升级所有包 |
搜索仓库包 | pacman -Ss 关键词 | 查找可用软件(简洁版:-Ssq ) |
清理旧缓存 | pacman -Sc | 删除未安装包的缓存(安全清理) |
删除孤立包 | pacman -Rns $(pacman -Qdtq) | 一键清理无用依赖包 |
安装软件包:
pacman -S 包名 # 安装单个包(例:`pacman -S firefox`)
pacman -S 包1 包2 # 同时安装多个包
pacman -Sy 包名 # 先同步仓库数据库再安装
pacman -U 本地包路径 # 安装本地包(如`.pkg.tar.zst`文件)
卸载软件包:
pacman -R 包名 # 删除包但保留依赖
pacman -Rs 包名 # 删除包及其未使用的依赖(**推荐**)
pacman -Rsc 包名 # 强制删除包及所有依赖(谨慎使用!)
pacman -Rns 包名 # 删除包+依赖+配置文件(彻底清理)
系统升级:
pacman -Syu # 同步仓库并升级所有包(**最常用**)
pacman -Sy # 仅刷新仓库数据库(不升级包)
pacman -Su # 仅升级已安装包(需先执行`pacman -Sy`)
搜索与查询:
pacman -Ss 关键词 # 搜索仓库中匹配的包(例:`pacman -Ss editor`)
pacman -Qs 关键词 # 搜索已安装的包
pacman -Qi 包名 # 查看已安装包的详细信息(版本、依赖等)
pacman -Ql 包名 # 列出包安装的所有文件
清理缓存:
pacman -Sc # 删除未安装包的缓存(**安全清理**)
pacman -Scc # 彻底清空所有缓存(**慎用**!无法降级)
依赖管理:
pacman -Qdt # 列出不再被依赖的孤立包(可删除)
pacman -R $(pacman -Qdtq) # 一键删除所有孤立包
六、安装MinGW64的编译环境
注意:MSYS2的子系统没有预安装工具链,需要我们自己安装。
安装工具链:
pacman -S --needed base-devel mingw-w64-x86_64-toolchain
安装make和cmake:
pacman -S mingw-w64-x86_64-make mingw-w64-x86_64-cmake
base-devel 基础开发工具组:
- 构建工具
- make:自动化编译管理器
- autoconf/automake:生成配置脚本和Makefile的工具
- pkg-config:管理编译依赖库路径的工具
- 版本控制与打包工具
- git:代码版本控制系统
- tar/zip/unzip:文件压缩与解压工具
- 其他开发辅助工具
- diffutils:文件差异比对工具
- binutils:二进制工具集(如链接器 ld)
mingw-w64-x86_64-toolchain MinGW-w64 工具链:
- 编译器套件
- gcc:C 语言编译器
- g++:C++ 编译器
- gfortran:Fortran 编译器(可选安装)
- gcc-ada/gcc-objc:Ada 和 Objective-C 编译器(可选)
- 调试与分析工具
- gdb:GNU 调试器
- gdb-multiarch:支持多架构的调试器
- 运行时库与依赖
- crt-git:C 运行时库
- winpthreads-git:Windows 线程库
- libgccjit:GCC JIT 编译库
- 头文件与开发支持
- headers-git:系统头文件
- libmangle-git:名称修饰解析工具
七、msys2 常见问题
(1)msys2继承外部环境变量
目的:使用MinGW终端能继承vs2019原生控制台的环境变量,使其能正常使用cl等命令
修改msys2_shell.cmd脚本
使用VS2019的终端启动msys2_shell.cmd
(2)解决link.exe冲突问题
方法1:以MSVC的link.exe绝对路径指定程序(这里使用一个脚本替代)
# mslink 脚本内容
#!/bin/sh
LINK_EXE_PATH=$(dirname "$(command -v cl)")/link
if [ -x "$LINK_EXE_PATH" ]; then
"$LINK_EXE_PATH" $@
else
link.exe $@
fi
exit $?
# 增加执行权限
chmod 755 mslink
# 使用 (!!注意在MinGW终端要使用的是"-",比如-c,而不是/c)
cl.exe -c hello.c
./mslink -out:hello.exe hello.obj
方法2:将MinGW的link.exe重命名
(3)找不到make的问题
mingw上的make名称叫为mingw32-make,可以拷贝一个并重命名为make。