[已解决] Windows如何安装gcc、make、cmake,安装MSYS2卡住、下载和更新出错的问题

如果你想在 Windows 上进行 C/C++ 编程,不想动用 Microsoft Visual Studio 大家伙,又要安装像 GCC、Make、Cmake、Clang 这样的编译器,MSYS2 是不二之选。本文总结了我在安装使用 MSYS2 遇到的问题以及解决方法。

MSYS2 官网:https://www.msys2.org/

问题一:MSYS2 安装到 50% 卡住了

​​在这里插入图片描述
解决:请动用你的智慧解决连接外网的问题(在此省略一万字),才能顺利完成安装。
在这里插入图片描述
不懂怎么办?

安装到50%强行结束安装进程,此时 MSYS2 已经安装完的了,找出 MSYS2 目录下的 ucrt64.exe 运行。
在这里插入图片描述

问题二:MSYS2 有 CLANG64、MINGW64、UCRT64 等部件,怎么选?

部件名称运行时库编译器适用系统简单理解
UCRT64UCRT (现代)GCC64位 Windows现在的首选标准,最像现代 Windows 自家的东西。
MINGW64MSVCRT (旧版)GCC64位 Windows传统经典款,为了兼容老系统或旧代码。
CLANG64UCRT (现代)Clang64位 Windows给喜欢 Clang/LLVM 的人用,错误提示更友好。
MSYScygwin (模拟层)GCC64位 Windows系统维护专用,用来跑一些复杂的 Linux 脚本。
ClangArm64UCRT (现代)ClangARM 架构给 Surface Pro X 或新款 ARM 笔记本用的。

对于 99% 的小白用户,或者想在 VS Code / SublimeText 里写 C/C++:

首选:UCRT64

这是目前官方最推荐、最现代化、bug 最少的选择。

问题三:初次运行 MSYS2,怎么开始?

MSYS2 使用 pacman 包管理程序安装和删除必要的程序和库。第一次运行 MSYS2 就要运行 :
pacman -Syyu

问题四:pacman命令总是报错连接失败?

如果报错:failed retrieving file ‘mingw32.db’ from mirror.msys2.org: Connection timed out … 或者出现 403、404错误,默认是连接国外镜像源的,需要切换国内的阿里源或清华源。
在这里插入图片描述

解决:
打开 MSYS2 安装目录的 etc\pacman.d 目录下的所有mirrorlist文件,在 Tier2 找到 aliyun 一行,复制粘贴到 Primary 下面,保存。然后对目录内其他 mirrorlist文件都如法炮制。
在这里插入图片描述
我这里用阿里源示范。为什么不用清华源?
其实我一开始就切换为清华源,但在下载过程中仍出错,导致最后虽然勉强完成了安装GCC编译器,但是编译器链路不完整,无法正常编译任何C/C++代码,后来改为阿里源重新来一遍就正常了。

接下来继续:
在这里插入图片描述
第一次运行会提示:To complete this update all MSYS2 processes including this terminal will be closed. Confirm to proceed [Y/n]
输入Y,然后手动重新运行 MSYS2 - UCRT64 程序,再次运行 pacman -Syyu
在这里插入图片描述
直至安装成功。
在这里插入图片描述

问题五:如何安装 gcc / make / cmake 编译器?

现在的 MSYS2 只是一个空壳,我们要往里面装入真正的“武器”——编译器。运行:

pacman -S gcc make cmake --noconfirm

其中 --noconfirm 参数不需要用户输入Y继续。
在这里插入图片描述
安装完毕,运行 gcc --version 验证版本号。
在这里插入图片描述

通常还要安装 MinGW-w64 工具链,它能让你在 Windows 下编译出原生程序。运行:

pacman -S --needed base-devel mingw-w64-x86_64-toolchain --noconfirm

问题六:听说 Windows 环境使用 clang 编译出来的程序性能更快,可以在 UCRT64 环境直接安装 clang 吗?

在 UCRT64 环境里确实可以安装 Clang,但它和 Clang64 环境下的 Clang 有本质上的“血缘”区别。
我们得先聊聊编译器背后的两个“零件”:编译器本身和标准库(也就是代码运行时的地基)。

特性UCRT64 环境下的 ClangClang64 环境下的 Clang
底层引擎 (Runtime)UCRT (微软现代运行时)UCRT (微软现代运行时)
C++ 标准库libstdc++ (来自 GCC)libc++ (来自 LLVM/Clang 原生)
链接器ld (来自 GNU)lld (来自 LLVM)
设计初衷兼容性:让习惯用 GCC 环境的人临时用一下 Clang。纯血性:全套 LLVM 工具链,性能和特性最完整。

如果你在 UCRT64 环境里运行 pacman -S clang 安装了 mingw-w64-ucrt-x86_64-clang,这个 Clang 会像一个“外来务工者”。它在编译代码时,会去借用 GCC 的那套工具和库(libstdc++)。

优点:你可以把 Clang 编译出来的东西和 GCC 编译出来的东西混合在一起用,因为它们的“地基”是一样的。
缺点:你无法享受到 Clang 的一些原生特性(比如更先进的静态分析或 libc++ 的特定优化)。

那么,在 Clang64 环境里的 Clang 又是怎样的?
从编译器、链接器到 C++ 标准库(libc++),全部都是 LLVM 家族的产品。

优点:性能更好、对现代 C++ 特性的支持往往比 GCC 的标准库更激进,且编译速度通常更快。

缺点:它编译出来的二进制文件,可能无法简单地与 UCRT64(GCC 体系)编译出来的文件进行混合链接。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值