轉自:http://www.cr173.com/soft/132367.html
MinGW64位版,默認編譯出來是64位的,需要編譯32位請使用-m32 參數!mingw是一款gnu工具集合是Minimalist GNU on Windows的簡稱,一個可自由使用和自由發布的Windows特定頭文件和使用GNU工具集導入庫的集合!允許你在GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方C運行時庫。MinGW 是一組包含文件和端口庫,其功能是允許控制台模式的程序使用微軟的標准C運行時間庫(MSVCRT.DLL)
GCC命令行參數
復習一下GCC命令行參數,看看各個版本的區別——
32位版:加上 -m32 參數,生成32位的代碼。
64位版:加上 -m64 參數,生成64位的代碼。
debug版:加上 -g 參數,生成調試信息。
release版:加上 -static 參數,進行靜態鏈接,使程序不再依賴動態庫。加上 -O3 參數,進行最快速度優化。加上-DNDEBUG參數,定義NDEBUG宏,屏蔽斷言。
當沒有-m32或-m64參數時,一般情況下會生成跟操作系統位數一致的代碼,但某些編譯器存在例外,例如——
32位Linux下的GCC,默認是編譯為32位代碼。
64位Linux下的GCC,默認是編譯為64位代碼。
Window系統下的MinGW,總是編譯為32位代碼。因為MinGW只支持32位代碼。
Window系統下的MinGW-w64(例如安裝了TDM-GCC,選擇MinGW-w64),默認是編譯為64位代碼,包括在32位的Windows系統下。
MinGW分為較早開發的MinGW32和之后為編譯64位程序開發的MinGW-w64,MinGW32只能編譯32位的程序,而mingw64不僅能編譯64位程序,也能編譯32位程序,還能進行交叉編譯,即在32位主機上編譯64位程序,在64位主機上編譯32位程序。
mingw64環境搭建
1.首先下載mingw64,
下載下來后直接雙擊安裝,我直接安裝在C盤,目錄如下:

2. 下載msys. http://www.mingw.org/wiki/MSYS/,我下載的是1.0.11版本的。直接點擊安裝,我安裝在C盤,安裝過程中會有一些提示,yes就行,最后需要配置一個mingw的環境變量,我配置的是上圖中的地址C:/mingw-w64/x86_64-4.9.2-posix-seh-rt_v3-rev1/mingw64,(注意正反斜杠啊)可能他會提示錯誤,說找不到路徑之類的,不要管他,暴力一點,直接到C:\msys\1.0\etc目錄,復制fstab.sample為fstab,然后編輯如下圖:

接着編輯C:\msys\1.0\msys.bat文件,在開頭加上call "D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\vcvars64.bat"在這樣環境變量就配置好了。
3.下載x264 ffmpeg
下載完之后全部拷貝到C:\msys\1.0\home。
cd到x264目錄,在公司電腦上編譯,簡直是一路暢通,沒有任何錯誤。步驟如下:
1. ./configure --prefix=/mingw --enable-win32thread --host=x86_64-w64-mingw32 --enable-static --enable-shared
make
make install,然后你去你會發現mingw64下面會有x264的.h 以及lib文件。
2.編譯ffmpeg
我用的命令如下
./configure --prefix=/mingw --enable-gpl --enable-nonfree --enable-postproc --enable-avfilter --enable-ffplay --enable-avresample --enable-w32threads --enable-runtime-cpudetect --enable-memalign-hack --enable-bzlib --enable-libx264 --enable-zlib --disable-debug --enable-shared --arch=x86_64 --host-os=win64 --extra-cflags=-I/mingw/include --extra-ldflags=-L/mingw/lib ,大家可以根據自己的需求增減選項。configure之后肯定會報一個警告,沒有pkg-config這個玩意,需要下載glib_2.18.4-1_win32.zip和pkg-config_0.23-3_win32.zip,下載完之后只要把pkg-config.exe這個東西拷貝到msys/1.0/bin目下,然后會少個dll,在把dll拷貝進去。在執行上面的命令之后,這個警告就不會出現了。
接着
make
make install,ok安裝完畢,你直接在msys里面執行cd /mingw/bin,里面你就可以看到很多dll,和ffserver.exe之類的,如果你需要編譯出ffplay,那還要編譯一個SDL1.2版本的。到此為止全部就搞定了,感覺又很簡單,關鍵是msys的環境變量一定要配置好,否則出現各種蛋疼。
編譯新版本的ffmpeg的時候會出現某某dll庫找不到,缺什么下載什么,有64位版本就用64位版本,確保不出問題。這樣下來應該就可以編譯通過了。
查看編譯后的版本是否是64位的,可以用

PS:我記得以前編譯ffmpeg和x264的時候總是提示一些類型錯誤int8_t之類的,是因為inttype.h 還有stdint.h這兩個頭文件的問題,不過現在的版本編譯的時候不會再出現這種低級錯誤了,如果你編譯新版本的時候出現,或許是你環境沒有配置好,你可以從mingw里面拷貝這兩個文件,然后自己改,估計也夠嗆的。
安裝步驟
以下以mingw-w64-bin_x86_64-mingw_20110510_sezero.zip包的安裝為例,mingw-w64-bin_x86_64-mingw_20110510_sezero.zip包的安裝方法相同。
1.解壓mingw-w64-bin_x86_64-mingw_20110510_sezero.zip文件到某個目錄d:\thsoft\mingw64
測試安裝是否成功
打開cmd,進入d:\thsoft\mingw64\bin目錄,輸入一下命令gcc -v
將顯示gcc的版本等信息,如果看到此信息,表示安裝成功。
更進一步
1.若在msys(MSYS安裝方法)中使用,繼續一下步驟
1)打開msys安裝目錄下的etc/fstab,如果沒有該文件,則復制fstab.sample文件,並重名為fstab
2)修改fstab文件
將
c:/mingw /mingw
修改為自己的mingw安裝目錄
D:/thsoft/mingw64 /mingw
3)測試是否安裝成功,
啟動msys終端,輸入gcc -v
2.若要在eclipse cdt(eclipse cdt安裝方法)中使用,執行如下操作
1)配置Path環境變量
我的電腦–右鍵–屬性–高級–環境變量–系統變量中的path–雙擊
在path的最前面添加:
D:\thsoft\mingw64\bin;
2)測試是否安裝成功
打開eclipse cdt,新建一個hellowold項目,編譯連接(eclipse cdt使用Mingw編譯項目,該文章是mingw32的使用方法,mingw64也同樣適用),看是否能編譯運行。
其他說明
如果想再32位的環境下,使用mingw-w64-bin_i686-mingw_20110510_sezero.zip,編譯64位的程序,以上基本相同,但需要做一下修改:
四、–>1–>3)需要改為如下:
x86_64-w64-mingw32-g -v
這個是交叉編譯的編譯工具的命名比較奇特的地方,可能是若在相同的機器上安裝多個mingw64,gcc出現同名的情況。
四、–>2–>2)需要改為如下:
我的電腦–右鍵–屬性–高級–環境變量–系統變量中的path–雙擊
在path的最前面添加:
D:\thsoft\mingw64\x86_64-w64-mingw32\bin
MinGW與CygWin/gcc的區別
MinGW相比CygWin/gcc來講,更加貼近win32。因為它幾乎支持所有的Win32API。它所連接的程序,不需要任何第三方庫即可運行。
CygWin/gcc,其實這是兩個東西。CygWin是一個讓Windows擁有Unix-like環境的軟件。而gcc就是安裝在CygWin上的編譯器。
CygWin/gcc與MinGW的最大區別在於:使用CygWin/gcc可以在Windows下調用unix-like的API,(如fork,spawn,signals,select,sockets等)。也就是說Cygwin是運行在Windows下的,但是她使用的是Unix-like系統的函數和思想。由於這個區別,導致的結果就是用CygWin/gcc編譯出來的程序可以無縫的運行在*nix環境下。但是如果調用了unix特有的API函數,在windows環境下不能正常運行,如果想在windows下正常運行的,就必須依賴cygwin1.dll,速度上會有些影響。
而用MinGW編譯出來的程序,如果源代碼里面調用了unix環境的API,則MinGW會把這些對UNIX的API調用翻譯成win32下等價的形式。同時這個程序是不能在windows下運行的。
說白了,如果你是想在windows環境下開發linux運行程序,那么CygWin/gcc是你的不二之選。
而如果你想開發的是windows運行程序,並且追求速度,那么二者相比而言,MinGW是更好的選擇
