如何安装MinGW-w64和MSYS2?

113

我在尝试构建一些开源库。我需要一个包管理系统来轻松地下载依赖项。起初我使用 MinGWMSYS。但是它们自带的软件包有限。有人告诉我要使用 Mingw-w64MSYS2

我从 这里 下载了 mingw-w64-install。运行时,报告了以下错误。如何解决?

Enter image description here

另外,从 Mingw-w64 的下载页面上,我看到很多下载链接。甚至列出了Cygwin。Cygwin 和 Mingw-w64 有什么关系?

Enter image description here

我的理解是,在 MinGW 和 MSYS 时代,MSYS 只是 MinGW 的一个不错的插件;而在 Mingw-w64 + MSYS2 时代,MSYS2 是独立的,而 Mingw-w64 只是一组它可以使用的库。就像 Cygwin 可以下载许多不同的软件包。

4个回答

258
很遗憾,你使用的MinGW-w64安装程序有时会出现这个问题。我自己也不确定为什么会发生这种情况(我认为这可能与Sourceforge的URL重定向或者安装程序当前无法正确处理的其他原因有关)。
无论如何,如果你已经计划使用MSYS2,就没有必要再使用那个安装程序了。
  1. 此页面下载MSYS2。

  2. 安装完成后,在开始菜单中点击MSYS2 UCRT64(或者C:\msys64\ucrt64.exe)。

    如果操作正确,终端提示符将显示品红色的UCRT64,而不是MSYS

  3. 使用pacman -Syuu更新MSYS2。如果在更新过程中终端自动关闭,请重新启动并重复相同的命令以完成更新。

    您应该定期更新您的安装。

  4. 安装工具链(即编译器和一些额外的工具):

    pacman -S mingw-w64-ucrt-x86_64-toolchain
    
  5. 安装您可能需要的任何库/工具。您可以通过执行以下命令搜索存储库:

    pacman -Ss 要安装的内容的名称
    

    例如:

    pacman -Ss gsl
    

    然后使用以下命令进行安装:

    pacman -S 要安装的内容的包名
    

    例如:

    pacman -S mingw-w64-ucrt-x86_64-gsl
    

    从那时起,GSL库将自动被您的编译器找到!

    请确保您安装的任何编译器和库都具有此包前缀:mingw-w64-ucrt-x86_64-。除非您知道自己在做什么,否则只使用无前缀的包来安装其他命令行实用程序(如grepsedmake等)。

  6. 通过执行以下命令验证编译器是否正常工作:

    gcc --version
    
如果你想在MSYS2环境之外使用已安装的工具链(包括库),你只需要将 C:/msys64/ucrt64/bin 添加到你的 PATH 中。
MSYS2 提供了多种编译器版本,其中 UCRT64 是其中之一。这应该是一个合理的默认选项。

5
谢谢。我如何获取pacman可以识别的软件包的规范名称? - smwikipedia
1
如果同时安装32位和64位工具链,它会起作用吗? - Colonel Panic
2
@Colonel 是的,它会将工具链(以及您安装的任何第三方库)安装在单独的目录(/mingw32 和 /mingw64)中。 - rubenvb
1
@Toby 我同意他们采用“Arch Way”来解释事情,即阅读Arch wiki上的pacman,你几乎就会知道相同的内容。初学者的设置可能很有用,尽管现在已经在SO上了,应该很快就会在Google上出现 :).(把这个看作是:继续给这个答案点赞 :P) - rubenvb
2
使用 pacman 安装 mingw-w64 是一个很好的建议。我在尝试在代理后安装 mingw-w64 时遇到了相同的问题。首先安装 MSYS2,然后设置代理的环境变量,例如 http://superuser.com/questions/713582/mingw-installer-not-working-with-proxy,并按照您的答案操作就可以完美解决。 - francis
显示剩余10条评论

58

MSYS 已经很长时间没有更新了。MSYS2 更加活跃,您可以从 MSYS2 下载。它同时拥有 mingwcygwin fork 软件包。

安装 MinGW-w64 工具链(参考):

  1. 从“开始”菜单中打开 MSYS2 shell
  2. 运行 pacman -Sy pacman 命令来更新软件包数据库
  3. 重新打开 shell,并运行 pacman -Syu 命令来更新软件包数据库和核心系统软件包
  4. 重新打开 shell,并运行 pacman -Su 命令来更新其余软件包
  5. 安装编译器:
    • 对于 32 位目标,请运行命令 pacman -S mingw-w64-i686-toolchain
    • 对于 64 位目标,请运行命令 pacman -S mingw-w64-x86_64-toolchain
  6. 选择要安装的软件包;默认安装所有软件包
  7. 您可能还需要 make。运行命令 pacman -S make

3
我该如何安装特定版本的MinGW-w64,例如x86_64-6.2.0-release-posix-seh-rt_v5-rev1 - Youda008
1
这是否意味着不再需要按照这里所描述的mingw安装程序?我只需安装msys2吗? - lanoxx
1
链接 Reference 已损坏。 - Jean-Francois T.
有什么想法,为什么msys2 shell会在一秒后自动关闭? - A_P
3
如果您需要cmake,则必须安装pacman -S mingw-w64-x86_64-cmake而不是cmake。普通的cmake将缺少minGW的生成器。 - user136036
重要提示——使用 pacman 升级命令时,可能会显示一个消息告诉你强制关闭窗口——实际上遵守这个消息非常重要。 - M.M

4

现在您还可以从https://winlibs.com/获取MinGW-w64的独立个人版本,它不需要任何安装; 只需解压缩即可使用。这允许在同一系统上拥有多个工具链(例如,一个用于Windows 32位,另一个用于Windows 64位)。


MSYS2还支持每个安装的多个工具链(和多个安装)。Winlibs确实易于使用,但缺少软件包管理器(即没有预构建的库)和类似Linux的环境(无法使用Autotools构建东西)。 - HolyBlackCat
1
@HolyBlackCat 感谢您的见解。我正在为winlibs开发一个软件包管理器,并使其跨平台。 - Brecht Sanders

0
据我所知,最简单的方法是使用Chocolatey来安装MinGW:
choco install mingw

然后使用命令whereis gcc进行检查。它将被安装在C:\ProgramData\chocolatey\bin中。

还有一件事,要让make工作,只需在C:\ProgramData\chocolatey\bin中复制(或重命名)mingw32-make.exe为make.exe即可。


关于“要安装在C:\ProgramData”:这不取决于Windows版本和Windows的配置吗? - Peter Mortensen
"mingw32-make"和"make"是不同的东西,假装它们是相同的并没有任何好处。 - HolyBlackCat
这会安装 pacman(软件包管理器)吗? MSYS2 的主要卖点之一是其众多的软件包... - HolyBlackCat
1
mingw32-makemake 的一个版本,它已经被移植到了 Windows 平台上,并且使用了 MinGW 工具。它的工作方式类似于 make,但由于 Windows 平台的差异,在语法和行为方面存在一些不同。 - JGaber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接