msys2 mingw32環境搭建

2022-07-26 15:27:11 字數 3180 閱讀 1512

安裝 msys2 64bit(msys2 安裝包及工具鏈。

#mirrorlist.msys

server =

#mirrorlist.mingw32

server =

#mirrorlist.mingw64

server = 12

3456

2) [ffs函式未定義] => 拷貝 lib/binutils/libiberty.a 到 /lib 中(對比config-host.mak並反彙編libiberty.a發現該庫提供ffs函式)

3) pthread庫安裝:

pthreads-w32-2-9-1-release

make clean gc-static

cp libpthreadgc2.a /mingw/lib

cp pthread.h sched.h /mingw/include

(一) msys2 自帶的開發環境,安裝的包叫 msys2-devel

在 msys2 shell 下,可以通過 pacman 命令查詢和安裝

11)查詢,可以看到包含 gcc

$ pacman -s msys2-devel

:: 共有 6 組員在組 msys2-devel 中:

:: 軟體庫 msys

1) binutils 2) cocom 3) gcc 4) gcc-fortran 5) msys2-w32api-headers

6) msys2-w32api-runtime12

3456

2)安裝

pacman -s msys2-devel

1(二)mingw-w64 的

安裝$ pacman -s mingw-w64-x86_64-toolchain

:: 共有 17 組員在組 mingw-w64-x86_64-toolchain 中:

:: 軟體庫 mingw64

1) mingw-w64-x86_64-binutils

2) mingw-w64-x86_64-crt-git

3) mingw-w64-x86_64-gcc

4) mingw-w64-x86_64-gcc-ada

5) mingw-w64-x86_64-gcc-fortran

6) mingw-w64-x86_64-gcc-libgfortran

7) mingw-w64-x86_64-gcc-libs

8) mingw-w64-x86_64-gcc-objc

9) mingw-w64-x86_64-gdb

10) mingw-w64-x86_64-headers-git

11) mingw-w64-x86_64-libmangle-git

12) mingw-w64-x86_64-libwinpthread-git

13) mingw-w64-x86_64-make

14) mingw-w64-x86_64-pkg-config

15) mingw-w64-x86_64-tools-git

16) mingw-w64-x86_64-winpthreads-git

17) mingw-w64-x86_64-winstorecompat-git12

3456

78910

1112

1314

1516

1718

1920

可以看到,也有gcc.

執行不同的 shell,則執行對應版本的 gcc.

(圖中第乙個 shell 是 mingw 32-bit 版本的,類似於 64-bit 版本的)

那麼,這兩者有什麼區別呢?

一言以蔽之,前者編譯出來的可執行檔案,要依賴 msys2 提供的動態鏈結庫,而後者不需要。下面詳細說明一下:

(一) msys2 下的 gcc 編譯環境,編譯的可執行檔案要依賴於 msys-2.0.dll,這個 dll 提供了 linux 下程式設計的提供的函式和介面,例如 fork 函式。

這個編譯環境對於編譯基於 linux 下編寫的軟體,是非常適合的。例如編譯 gnu 提供的各種工具。例如,你想編譯最新版本的 gnu grep 工具,msys2 下的這個環境是非常適合的。

這個環境非常類似於 cygwin.

乙個簡單的 hello world 程式:

#include

void main()12

345編譯出來的 a.exe, 用 dumpbin (這個是visual studio 提供的工具,當然,你也可以安裝 dependency walker 這個獨立小巧的工具來看)來檢視 dll 依賴關係:

d:\hello_world> dumpbin /dependents a.exe

1看到:

dump of file a.exe

file type: executable image

image has the following dependencies:

msys-2.0.dll

kernel32.dll12

3456

78910

1112

其中依賴了 msys-2.0.dll. (kernel32.dll 是 windows 提供的)。

在 windows 的 cmd 下直接執行,如果沒有把 msys-2.0.dll 的路徑告知的話,則會執行不成功。

(二)用 mingw64 的編譯環境,得到 a_mingw.exe

d:\hello_world>dumpbin /dependents a_mingw.exe1看到

dump of file a_mingw.exe

file type: executable image

image has the following dependencies:

kernel32.dll

msvcrt.dll12

3456

78910

1112

不再依賴於 msys-2.0.dll,上面兩個 dll 都是 windows 提供的。

所以,如果源**就是基於 windows 開發的,那使用 mingw 的編譯環境比較好,編譯出來的可執行檔案,不用再依賴 msys 提供的動態鏈結庫。當然,前提是**中不能使用 linux 的東西,即 posix 的那套東西。

備註:msvcrt.dll 提供的介面,可以參考 c run-time library reference

MSYS2環境搭建

以安裝mingw w64 i686 zlib為例,命令如下 1pacman s mingw w64 i686 zlib 然後按y進行確認安裝,如下圖所示 安裝完畢,即會安裝到mingw32目錄下。接著測試安裝jpeg png tiff webp freetype glew glfw成功。另外,在qt...

mingw64環境搭建

mingw64位版,預設編譯出來是64位的,需要編譯32位請使用 m32 引數!mingw是一款gnu工具集合是minimalist gnu on windows的簡稱,乙個可自由使用和自由發布的windows特定標頭檔案和使用gnu工具集導入庫的集合 允許你在gnu linux和windows平台...

Qt5 3 2 mingw32環境變數設定方法

環境變數的設定方法 右擊 計算機 屬性 高階系統設定 在彈出的視窗如下 在該介面的 系統變數 欄裡 選擇 path 選項,在彈出的視窗裡,變數值 一欄中加入以下內容 c qt qt5.3.2 5.3 mingw482 32 bin 即可!另外 在c qt qt5.3.2 tools mingw482...