MinGW64位版,默認(rèn)編譯出來(lái)是64位的,需要編譯32位請(qǐng)使用-m32 參數(shù)!mingw是一款gnu工具集合是Minimalist GNU on Windows的簡(jiǎn)稱,一個(gè)可自由使用和自由發(fā)布的Windows特定頭文件和使用GNU工具集導(dǎo)入庫(kù)的集合!允許你在GNU/Linux和Windows平臺(tái)生成本地的Windows程序而不需要第三方C運(yùn)行時(shí)庫(kù)。MinGW 是一組包含文件和端口庫(kù),其功能是允許控制臺(tái)模式的程序使用微軟的標(biāo)準(zhǔn)C運(yùn)行時(shí)間庫(kù)(MSVCRT.DLL)
GCC命令行參數(shù)
復(fù)習(xí)一下GCC命令行參數(shù),看看各個(gè)版本的區(qū)別——
32位版:加上 -m32 參數(shù),生成32位的代碼。
64位版:加上 -m64 參數(shù),生成64位的代碼。
debug版:加上 -g 參數(shù),生成調(diào)試信息。
release版:加上 -static 參數(shù),進(jìn)行靜態(tài)鏈接,使程序不再依賴動(dòng)態(tài)庫(kù)。加上 -O3 參數(shù),進(jìn)行最快速度優(yōu)化。加上-DNDEBUG參數(shù),定義NDEBUG宏,屏蔽斷言。
當(dāng)沒(méi)有-m32或-m64參數(shù)時(shí),一般情況下會(huì)生成跟操作系統(tǒng)位數(shù)一致的代碼,但某些編譯器存在例外,例如——
32位Linux下的GCC,默認(rèn)是編譯為32位代碼。
64位Linux下的GCC,默認(rèn)是編譯為64位代碼。
Window系統(tǒng)下的MinGW,總是編譯為32位代碼。因?yàn)镸inGW只支持32位代碼。
Window系統(tǒng)下的MinGW-w64(例如安裝了TDM-GCC,選擇MinGW-w64),默認(rèn)是編譯為64位代碼,包括在32位的Windows系統(tǒng)下。
MinGW分為較早開(kāi)發(fā)的MinGW32和之后為編譯64位程序開(kāi)發(fā)的MinGW-w64,MinGW32只能編譯32位的程序,而mingw64不僅能編譯64位程序,也能編譯32位程序,還能進(jìn)行交叉編譯,即在32位主機(jī)上編譯64位程序,在64位主機(jī)上編譯32位程序。
mingw64環(huán)境搭建
1.首先下載mingw64,
下載下來(lái)后直接雙擊安裝,我直接安裝在C盤(pán),目錄如下:
2. 下載msys. http://www.mingw.org/wiki/MSYS/,我下載的是1.0.11版本的。直接點(diǎn)擊安裝,我安裝在C盤(pán),安裝過(guò)程中會(huì)有一些提示,yes就行,最后需要配置一個(gè)mingw的環(huán)境變量,我配置的是上圖中的地址C:/mingw-w64/x86_64-4.9.2-posix-seh-rt_v3-rev1/mingw64,(注意正反斜杠。┛赡芩麜(huì)提示錯(cuò)誤,說(shuō)找不到路徑之類的,不要管他,暴力一點(diǎn),直接到C:\msys\1.0\etc目錄,復(fù)制fstab.sample為fstab,然后編輯如下圖:
接著編輯C:\msys\1.0\msys.bat文件,在開(kāi)頭加上call "D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\vcvars64.bat"在這樣環(huán)境變量就配置好了。
3.下載x264 ffmpeg
下載完之后全部拷貝到C:\msys\1.0\home。
cd到x264目錄,在公司電腦上編譯,簡(jiǎn)直是一路暢通,沒(méi)有任何錯(cuò)誤。步驟如下:
1. ./configure --prefix=/mingw --enable-win32thread --host=x86_64-w64-mingw32 --enable-static --enable-shared
make
make install,然后你去你會(huì)發(fā)現(xiàn)mingw64下面會(huì)有x264的.h 以及l(fā)ib文件。
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 ,大家可以根據(jù)自己的需求增減選項(xiàng)。configure之后肯定會(huì)報(bào)一個(gè)警告,沒(méi)有pkg-config這個(gè)玩意,需要下載glib_2.18.4-1_win32.zip和pkg-config_0.23-3_win32.zip,下載完之后只要把pkg-config.exe這個(gè)東西拷貝到msys/1.0/bin目下,然后會(huì)少個(gè)dll,在把dll拷貝進(jìn)去。在執(zhí)行上面的命令之后,這個(gè)警告就不會(huì)出現(xiàn)了。
接著
make
make install,ok安裝完畢,你直接在msys里面執(zhí)行cd /mingw/bin,里面你就可以看到很多dll,和ffserver.exe之類的,如果你需要編譯出ffplay,那還要編譯一個(gè)SDL1.2版本的。到此為止全部就搞定了,感覺(jué)又很簡(jiǎn)單,關(guān)鍵是msys的環(huán)境變量一定要配置好,否則出現(xiàn)各種蛋疼。
編譯新版本的ffmpeg的時(shí)候會(huì)出現(xiàn)某某dll庫(kù)找不到,缺什么下載什么,有64位版本就用64位版本,確保不出問(wèn)題。這樣下來(lái)應(yīng)該就可以編譯通過(guò)了。
查看編譯后的版本是否是64位的,可以用
PS:我記得以前編譯ffmpeg和x264的時(shí)候總是提示一些類型錯(cuò)誤int8_t之類的,是因?yàn)閕nttype.h 還有stdint.h這兩個(gè)頭文件的問(wèn)題,不過(guò)現(xiàn)在的版本編譯的時(shí)候不會(huì)再出現(xiàn)這種低級(jí)錯(cuò)誤了,如果你編譯新版本的時(shí)候出現(xiàn),或許是你環(huán)境沒(méi)有配置好,你可以從mingw里面拷貝這兩個(gè)文件,然后自己改,估計(jì)也夠嗆的。
安裝步驟
以下以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文件到某個(gè)目錄d:\thsoft\mingw64
測(cè)試安裝是否成功
打開(kāi)cmd,進(jìn)入d:\thsoft\mingw64\bin目錄,輸入一下命令gcc -v
將顯示gcc的版本等信息,如果看到此信息,表示安裝成功。
更進(jìn)一步
1.若在msys(MSYS安裝方法)中使用,繼續(xù)一下步驟
1)打開(kāi)msys安裝目錄下的etc/fstab,如果沒(méi)有該文件,則復(fù)制fstab.sample文件,并重名為fstab
2)修改fstab文件
將
c:/mingw /mingw
修改為自己的mingw安裝目錄
D:/thsoft/mingw64 /mingw
3)測(cè)試是否安裝成功,
啟動(dòng)msys終端,輸入gcc -v
2.若要在eclipse cdt(eclipse cdt安裝方法)中使用,執(zhí)行如下操作
1)配置Path環(huán)境變量
我的電腦–右鍵–屬性–高級(jí)–環(huán)境變量–系統(tǒng)變量中的path–雙擊
在path的最前面添加:
D:\thsoft\mingw64\bin;
2)測(cè)試是否安裝成功
打開(kāi)eclipse cdt,新建一個(gè)hellowold項(xiàng)目,編譯連接(eclipse cdt使用Mingw編譯項(xiàng)目,該文章是mingw32的使用方法,mingw64也同樣適用),看是否能編譯運(yùn)行。
其他說(shuō)明
如果想再32位的環(huán)境下,使用mingw-w64-bin_i686-mingw_20110510_sezero.zip,編譯64位的程序,以上基本相同,但需要做一下修改:
四、–>1–>3)需要改為如下:
x86_64-w64-mingw32-g -v
這個(gè)是交叉編譯的編譯工具的命名比較奇特的地方,可能是若在相同的機(jī)器上安裝多個(gè)mingw64,gcc出現(xiàn)同名的情況。
四、–>2–>2)需要改為如下:
我的電腦–右鍵–屬性–高級(jí)–環(huán)境變量–系統(tǒng)變量中的path–雙擊
在path的最前面添加:
D:\thsoft\mingw64\x86_64-w64-mingw32\bin
MinGW與CygWin/gcc的區(qū)別
MinGW相比CygWin/gcc來(lái)講,更加貼近win32。因?yàn)樗鼛缀踔С炙械腤in32API。它所連接的程序,不需要任何第三方庫(kù)即可運(yùn)行。
CygWin/gcc,其實(shí)這是兩個(gè)東西。CygWin是一個(gè)讓W(xué)indows擁有Unix-like環(huán)境的軟件。而gcc就是安裝在CygWin上的編譯器。
CygWin/gcc與MinGW的最大區(qū)別在于:使用CygWin/gcc可以在Windows下調(diào)用unix-like的API,(如fork,spawn,signals,select,sockets等)。也就是說(shuō)Cygwin是運(yùn)行在Windows下的,但是她使用的是Unix-like系統(tǒng)的函數(shù)和思想。由于這個(gè)區(qū)別,導(dǎo)致的結(jié)果就是用CygWin/gcc編譯出來(lái)的程序可以無(wú)縫的運(yùn)行在*nix環(huán)境下。但是如果調(diào)用了unix特有的API函數(shù),在windows環(huán)境下不能正常運(yùn)行,如果想在windows下正常運(yùn)行的,就必須依賴cygwin1.dll,速度上會(huì)有些影響。
而用MinGW編譯出來(lái)的程序,如果源代碼里面調(diào)用了unix環(huán)境的API,則MinGW會(huì)把這些對(duì)UNIX的API調(diào)用翻譯成win32下等價(jià)的形式。同時(shí)這個(gè)程序是不能在windows下運(yùn)行的。
說(shuō)白了,如果你是想在windows環(huán)境下開(kāi)發(fā)linux運(yùn)行程序,那么CygWin/gcc是你的不二之選。
而如果你想開(kāi)發(fā)的是windows運(yùn)行程序,并且追求速度,那么二者相比而言,MinGW是更好的選擇