前言
安装MSYS2的原因是,在windows安装protobuf时,想用mingw编译protobuf的库,而protobuf的官方手册只给出一句:
To build from source using Cygwin or MinGW, follow the Unix installation instructions, above.
这就非常尴尬,因为我不知道利用mingw来运行unix的命令。翻看了比较多的博客,stackoverflow一篇帖子刚好有解决方案,How to build Google’s protobuf in Windows using MinGW?,帖子上用的是MSYS,而由于Mingw和MSYS万年不更新,很多Cygwin新特性都没有。所以诞生了MSYS2项目,我们常用的git for windows就使用了MSYS2项目。
MSYS2不同于WSL这种提供环境,用来在windows上编译linux软件,而是用linux的指令编译原生的windows程序(native)。
这篇博客主要记录一下安装MSYS2的过程。
卸载mingw
由于我已经安装了Mingw,我不希望我有两个mingw,所以需要卸载原有的mingw,卸载方式很简单,把mingw的安装目录删除掉,并删掉设置的环境变量就行。
mingw的安装包安装mingw时有MSYS的选项(不是MSYS2)。
有两种方式得到这个Unix的命令行工具,一种是通过mingw安装包来安装msys,第二种是通过MSYS2来安装mingw。
安装MSYS2
- 访问MSYS2官网,下载官网首页的安装包。
- 安装完成以后,执行下面命令,建议执行两遍,第一遍执行完会自动退出。
或者第一遍执行pacman -Sy
,第二遍执行pacman -Su
。
pacman 是Arch Linux 的包管理器,类似于ubuntu的apt,详细参考 pacman命令介绍。
-S是主命令,安装安装的包的作用,后面的是子命令。
-u, --sysupgrade 升级所有已安装的软件包
-y, --refresh 从服务器下载新的软件包数据库
pacman -Syu
- 安装需要用到的包
利用-S命令安装所需要的包,像base-devel和mingw-w64-x86_64-toolchain都是一类包,我们可以通过序号选择。
pacman -S base-devel
pacman -S mingw-w64-x86_64-toolchain
base-devel 建议选的包是 autoconf、autogen、automake1.16、libtool、make、pkgconf等,按需选择。
输入命令序号用空格隔开即可
Enter a selection (default=all): 2 4 12 33 37 43
![在这里插入图片描述](https://img-blog.csdnimg.cn/f94cd82685434bed8348f4b31c312d09.PNG?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAYmxvdHM=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
mingw-w64-x86_64-toolchain只编译C++,没有什么fortran、objc和ada语言的需求的话,选择mingw-w64-x86_64-gcc 、mingw-w64-x86_64-gdb、mingw-w64-x86_64-make、mingw-w64-x86_64-pkgconf
![在这里插入图片描述](https://img-blog.csdnimg.cn/537426c124314624945368908f4d91d4.PNG?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAYmxvdHM=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
安装完成后,我们可以看到开始菜单有4个MSYS2的快捷方式。![在这里插入图片描述](https://img-blog.csdnimg.cn/7485248d256949ce85f690b5dbb506ad.PNG#pic_center)
这里MSYS很好的将各个编译环境隔离开,想用那个环境编译就得用对应的exe。比如想用MinGW64来编译,就必须得打开MSYSY2 MinGW 64-bit,在这个界面里make,否则会提醒没有gcc。
|
|
MSYSY2 MSYS |
用来管理和安装包的 |
MSYSY2 MinGW 32-bit |
编译32位程序,库链接到msvcrt上 |
MSYSY2 MinGW 64-bit |
编译64位程序,库链接到msvcrt上 |
MSYSY2 MSYS UCRT 64-bit |
编译64位程序,库链接到ucrt上 |
ps:ucrt,全称Universal C Runtime,通用C运行时库。
msvcrt,全称Microsoft Visual C Runtime Library,其实他和ucrt是一个东西。提供了print,malloc等基本C语言库函数的实现,只是ucrt比较新,win10版本以后作为系统组件。
知乎:msys2 mingw64、ucrt64、clang64的区别