admin 管理员组

文章数量: 886993

本文旨在介绍在Windows下搭建支持C/C++编码的开发环境。
1 概述

  • MSYS2是Windows下的类Unix命令行运行环境。它提供了pacman包管理器,用pacman可以方便你安装其它程序包或者工具。
  • MINGW32MINGW64 包含GNU编译工具集合,可以用它编译C/C++, Fortran,和其它源代码。它们的区别之处就是,分别是32位和64位系统下的版本。它们编译的代码,即使没有MINGW32MINGW64或者MSYS2提供的运行时库,也可以在Windows下运行。GCC既可以被MSYS2也可以被Window原生CMD命令调用。我乐意选择MSYS2,是因为它建立的环境,提供了包管理器,可以方便安装其它编码工具(例如,autoconfautomake)。 当然了,MINGW32MINGW64 也可以单独安装,即使没有 MSYS2。但是,我还是强烈建议使用MSYS2安装。

2 安装 MSYS2

  • 确保系统上没有mingw 或 msys,否则,请卸载它们;
  • 运行MSYS2 installer,或者使用 sourceforge上的 MSYS2
    installer(根据自己系统选择对应的版本);
  • 安装完成后,请务必不要按照官网给出的步骤,避免产生以下错误。
错误:GPGME error: Invalid crypto engine
错误:GPGME error: Invalid crypto engine
错误:GPGME error: Invalid crypto engine
错误:「mingw32」数据库不正确 (数据库不正确或损毁 (PGP 签名))
错误:「mingw64」数据库不正确 (数据库不正确或损毁 (PGP 签名))
错误:「msys」数据库不正确 (数据库不正确或损毁 (PGP 签名))
  • 按照 C:\msys64\etc\pacman.conf 第45至47行的描述:
# NOTE: You must run 'pacman-key --init' before first using pacman; the local
# keyring can then be populated with the keys of all official Arch Linux
# packagers with 'pacman-key --populate archlinux'.
  • 你必须先执行命令
pacman-key --init
  • 接着,换掉 C:\msys64\etc\pacman.d\ 的 mirrorlist.mingw32,
    mirrorlist.mingw64 和 mirrorlist.msys 里的默认源(这里,C:\msys64要对应于你安装的目录位置),改为以下源:
## 32-bit Mingw-w64 repository mirrorlist
Server = https://mirrors.tuna.tsinghua.edu/msys2/mingw/i686/
Server = https://mirrors.ustc.edu/msys2/mingw/i686/
Server = https://mirrors.xjtu.edu/msys2/mingw/i686/
## 64-bit Mingw-w64 repository mirrorlist
Server = https://mirrors.tuna.tsinghua.edu/msys2/mingw/x86_64/
Server = https://mirrors.ustc.edu/msys2/mingw/x86_64/
Server = https://mirrors.xjtu.edu/msys2/mingw/x86_64/
## MSYS2 repository mirrorlist
Server = https://mirrors.tuna.tsinghua.edu/msys2/msys/$arch
Server = https://mirrors.ustc.edu/msys2/REPOS/MSYS2/$arch
Server = https://mirrors.xjtu.edu/msys2/msys/$arch
  • 然后才能下命令来同步源,并更新
pacman -Syuu
  • 接着,你就可以愉快地使用了。
pacman -S man gcc base-devel git mingw-w64-i686-toolchain tar perl make openssl

至于上面签名问题的原因,在archlinux网站上的一篇帖子中《pacman 出了一些问题,error如下》分析一下原因,但是我还没有考证。待考证后再补充。 帖子内容如下:

类似问题,我以前也是隔几天就可能遇上。尝试过换用不同的源发现也不能降低问题出现的几率,就怀疑和ISP的http劫持有关。
解决方法是 /var/lib/pacman/sync 下的所有文件,添加支持https的源,再执行 pacman -Syu ,进行arch官方文件更新时总算没再遇过这样的问题,可惜archlinuxcn的源不支持https。
官方镜像里支持https的源,可以在下面链接里找到:
https://www.archlinux/mirrors/status/

3 安装MINGW32/MINGW64

  • 如果你安装的是64位msys2,那么执行下列命令:
> pacman -S base-devel mingw-w64-x86_64-toolchain
  • 如果你安装的是32位msys2,那么执行下列命令:
> pacman -S base-devel mingw-w64-i686-toolchain
  • 验证gcc
$ gcc --version
gcc.exe (Rev2, Built by MSYS2 project) 6.3.0
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

4 环境变量的设置

为了方便,一般我们会把gcc所在的路径加入系统的环境变量,这样就可以直接使用gcc命令而不用绝对路径。

  • 右键计算机 -> 属性-> 高级系统设置 -> 环境变量。然后,将C:\msys64\mingw64\bin添加到 path 变量中。
    确定以后 就可以在任意目录下直接使用gcc命令了。可以在任意目录打开cmd窗口,输入gcc查看环境变量是否设置成功。如果仍然提示不是内部或外部命令,说明环境变量设置失败。

参考文章:
MinGW coding under Windows (C, C++, OpenMP, MPI)

本文标签: 环境 工具 程序 Windows GNU