1. 程式人生 > >Windows 7下使用GNU工具編譯C/C++程式的環境搭建

Windows 7下使用GNU工具編譯C/C++程式的環境搭建

本文旨在介紹在Windows下搭建支援C/C++編碼的開發環境。
1 概述

  • MSYS2是Windows下的類Unix命令列執行環境。它提供了pacman包管理器,用pacman可以方便你安裝其它程式包或者工具。
  • MINGW32MINGW64 包含GNU編譯工具集合,可以用它編譯C/C++, Fortran,和其它原始碼。它們的區別之處就是,分別是32位和64位系統下的版本。它們編譯的程式碼,即使沒有MINGW32MINGW64或者MSYS2提供的執行時庫,也可以在Windows下執行。GCC既可以被MSYS2也可以被Window原生CMD命令呼叫。我樂意選擇MSYS2,是因為它建立的環境,提供了包管理器,可以方便安裝其它編碼工具(例如,autoconf
    automake)。 當然了,MINGW32MINGW64 也可以單獨安裝,即使沒有 MSYS2。但是,我還是強烈建議使用MSYS2安裝。

2 安裝 MSYS2

  • 確保系統上沒有mingw 或 msys,否則,請解除安裝它們;
  • 安裝完成後,請務必不要按照官網給出的步驟,避免產生以下錯誤。
錯誤: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.cn/msys2/mingw/i686/
Server = https://mirrors.ustc.edu.cn/msys2/mingw/i686/
Server = https://mirrors.xjtu.edu.cn/msys2/mingw/i686/
## 64-bit Mingw-w64 repository mirrorlist
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64/
Server = https://mirrors.ustc.edu.cn/msys2/mingw/x86_64/
Server = https://mirrors.xjtu.edu.cn/msys2/mingw/x86_64/
## MSYS2 repository mirrorlist
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch
Server = https://mirrors.ustc.edu.cn/msys2/REPOS/MSYS2/$arch
Server = https://mirrors.xjtu.edu.cn/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.org/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檢視環境變數是否設定成功。如果仍然提示不是內部或外部命令,說明環境變數設定失敗。

相關推薦

no