Windows 7下使用GNU工具編譯C/C++程式的環境搭建
阿新 • • 發佈:2019-01-20
本文旨在介紹在Windows下搭建支援C/C++編碼的開發環境。
1 概述
MSYS2
是Windows下的類Unix命令列執行環境。它提供了pacman
包管理器,用pacman
可以方便你安裝其它程式包或者工具。MINGW32
和MINGW64
包含GNU編譯工具集合,可以用它編譯C/C++, Fortran,和其它原始碼。它們的區別之處就是,分別是32位和64位系統下的版本。它們編譯的程式碼,即使沒有MINGW32
,MINGW64
或者MSYS2
提供的執行時庫,也可以在Windows下執行。GCC
既可以被MSYS2
也可以被Window原生CMD
命令呼叫。我樂意選擇MSYS2
,是因為它建立的環境,提供了包管理器,可以方便安裝其它編碼工具(例如,autoconf
automake
)。 當然了,MINGW32
和MINGW64
也可以單獨安裝,即使沒有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
檢視環境變數是否設定成功。如果仍然提示不是內部或外部命令,說明環境變數設定失敗。