97

我正在尝试构建一些开源库。我需要包管理系统来轻松下载依赖项。起初我正在使用MinGW+MSYS. 但是包含的包是有限的。有人告诉我使用MinGW-w64 + MSYS2.

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

在此处输入图像描述

顺便说一句,从MinGW-w64下载页面,我看到很多下载链接。甚至 Cygwin 也被列出。Cygwin和如何MinGW-w64相关?

在此处输入图像描述

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

4

3 回答 3

228

不幸的是,您使用的 MinGW-w64 安装程序有时会出现此问题。我自己不确定为什么会发生这种情况(我认为这与 Sourceforge URL 重定向或安装程序当前无法正确处理的任何事情有关)。

无论如何,如果您已经计划使用 MSYS2,则不需要该安装程序。

  1. 从此页面下载 MSYS2 。

  2. 安装完成后,在开始菜单(或安装目录)下MSYS2 64-bit或中单击新创建的“MSYS2 Shell”选项。MSYS2 32-bitmingw64.exemingw32.exe

    如果正确完成,终端提示将分别显示MINGW64or MINGW32, not MSYS

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

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

  4. 安装工具链

    a) 对于 64 位:

    pacman -S mingw-w64-x86_64-toolchain
    

    b) 对于 32 位:

    pacman -S mingw-w64-i686-toolchain
    

    这包括 GCC(编译器)、GDB(调试器)等等。

  5. 安装您可能需要的任何库/工具。您可以通过执行搜索存储库

    pacman -Ss name_of_something_i_want_to_install
    

    例如

    pacman -Ss gsl
    

    并安装使用

    pacman -S package_name_of_something_i_want_to_install
    

    例如

    pacman -S mingw-w64-x86_64-gsl
    

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

    确保您安装的任何编译器和库都具有此包前缀(mingw-w64-x86_64-对于 64 位或mingw-w64-i686-32 位)。除非您知道自己在做什么,否则只能对 misc 命令行实用程序(例如grepsed、等)使用不带前缀的包。make

  6. 验证编译器是否正在工作

    gcc --version
    

如果您想在 MSYS2 环境之外使用工具链(带有已安装的库),您需要做的就是添加<MSYS2 root>/mingw64/bin或添加<MSYS2 root>/mingw32/bin到您的PATH.

于 2015-05-06T08:40:48.563 回答
46

MSYS好久没更新了,MSYS2比较活跃,可以从MSYS2mingw下载,和cygwin 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. 选择要安装的包,默认是all
  7. 您可能还需要make,运行pacman -S make
于 2016-11-25T08:44:57.643 回答
0

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

于 2021-11-23T18:39:41.207 回答