转自: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 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位的,可以用
:我记得以前编译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文件,并重名为fstab2)修改fstab文件将c:/mingw /mingw修改为自己的mingw安装目录D:/thsoft/mingw64 /mingw3)测试是否安装成功,启动msys终端,输入gcc -v2.若要在 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\binMinGW与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是更好的选择