安裝 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...