在window平台下编译ffmpeg

来源:互联网 发布:黑客帝国3矩阵革命在线 编辑:程序博客网 时间:2024/05/20 23:31


MinGW是什么?
MinGW是建立在gcc和binutils项目上的,用来编译和连接代码,使之运行在windows系统上;
提供c、c++和fortran编译器和相关工具;
MinGW=Minimalist GNU for Windows;
MinGW使用微软的运行库,生成Windows下的代码;
因为不使用Gnu's General Public License,不需要发布程序的时候附加源代码。


DEV-CPP   是一个编译器,生成的工程后缀为   .dev,     源程序文件为   .cpp
develope   c   plus   plus正解!!!


MinGW-5.0.2.exe    MSYS-1.0.10.exe 下载地址
http://sourceforge.net/project/showfiles.php?group_id=2435

MSYS是windows的.dll/.exe等文件的库文件,
库文件就是帮你实现了某些功能的库函数的封装,你可以在你的程序中调用这些函数,然后连接一下就可以了。

区别:

cygwin/gcc和MinGW都是gcc在windows下的编译环境
cygwin/gcc完全可以和在linux下的gcc化做等号,这个可以从boost库的划分中可以看出来端倪,cygwin下的gcc和linux下的gcc完全使用的是相同的Toolsets。
所以完全可以和linux一起同步更新gcc版本,而不用担心问题,并且在cygwin/gcc做的东西(不用微软的)可以无缝的用在linux下,没有任何问题。是在windows下开发linux程序的一个很好的选择。但是在cygwin/gcc下编译出来的程序,在windows执行必须依赖cygwin1.dll,如果不想依赖这个东西的化,必须在gcc的编译选项中加入-mno-cygwin。加入这个选项其实gcc编译器就会自动的选择在安装cygwin/gcc时安上的mingw,这个mingw就是gcc的一个交叉编译。
对于mingw作为gcc在windows上的一个实现,由于不像cygwin的gcc在一个模拟linux上运行,同时相当一部分linux的工具不能够使用,不过现在已经有Msys这个模拟unix的shell,可以解决很多的问题,不过没有cygwin好用,而cygwin/gcc的no-cygwin选项又依赖于mingw的支持,所以更新的更慢的,现在只是到3.3.3。在mingw下也是可以升级gcc的,不过需要使用msys。升级方法和在cygwin和linux下差不多,就不再罗嗦了。不过就我的升级经验来看好像都不太顺利。具体深入的测试,我也没有时间做了。
也是可以让cygwin的最新安装的gcc支持no-cygwin,需要再做一遍交叉编译,但是我不会做,只好算了,呵呵,也许那一天我把这个搞定,再开一个贴吧。
根据以上的分析,如果在windows开发linux程序,cygwin是很好的选择。如果你开发的程序不介意有一个cygwin1.dll的话,也是可以选择cygwin的。如果你是想开发windows下的程序,还要必须用gcc的化,mingw是很好的一个选择。但是在windows下有太多的编译器了,bc,vc,intel c.....。
顺便说就题外的化,据说gcc4.0.0性能有很大的提升,如果我升级完gcc4后,再编译一把gcc4是不是以后的编译性能会提高很多呢?有机会一定要测试一下了,呵呵。

一个技巧:如何知道当前版本的gcc的安装配置,用命令:gcc -v就可以了,呵呵。


今天开始编译ffmpeg这个让人爱恨交加的东西了。由于VC++并非是一个标准的C编译器,所以ffmpeg使用的C99以及at&t汇编语法在VC下无法编译通过,我曾经从ffmpeg中提取过h263++的编码器,在不使用mmx优化选项的情况下,对C代码进行少许的改动还是能够编译通过和正常使用的,但是没有MMX优化的东西使用起来还是不爽的。

      采用MINGW在window平台下编译ffmpeg是个不错的选择,当然如果你有兴趣可以把它完全移植到VC环境下,我曾经的老板这么做过,(这是他的命根子,我连看一看的机会都没有,呵呵)据说移植了百万行代码。不过我怎么没发现有那么多呢。不过在VC下编译ffmpeg 会比用Mingw编译小很多,好像是500多K.。

     下面就说说用Mingw如何编译ffmpeg 吧。

第一步:应该是安装和配置编译环境,我的做法比较简单,首先我去下载了一个DEV-CPP编译器,它包含了最新的Mingw。如果你没有DEV-CPP,你可以直接下载并安装Mingw.下载地址是http://www.mingw.org/。我安装的版本是MinGW-3.1.0-1.exe,请顺手下载一个MSYS-1.0.10.exe它是windows下的一个虚拟linux shell环境,我们需要用它来执行 configure 、make 等命令。首先安装 MinGW到一个指定的目录,假设在c:/MinGW目录下吧。然后设置环境变量,在PATH中加入 c:/MinGW/BIN。然后安装MSYS ,安装的过程中会提示你进行一些配置,其中需要提示你输入MinGW 的安装目录。这里需要注意一下,请输入 C:/MinGW(搞不懂,我输入C:/MinGW居然告诉我找不到,呵呵,可能是开发者玩惯LINUX了吧)如果是安装了DEV-CPP那就输入C:/dev-cpp即可。哦,差点忘了,您安装MinGW的时候别忘了下载一个WINAPI的源码包,如果安装DEV-CPP就不用了。哎,建议你还是安装个DEV-CPP吧,这个小东西还是很不错的,需要的东西基本上都有了。好了,编译环境配置好了。

第二步:下载一个最新的ffmpeg源码包,我是通过CVS下载的,具体你可以看看ffmpeg的首页http://ffmpeg.sourceforge.net/index.php,通过CVS下载至少能保证你能得到最新的代码,ffmpeg的h264更新好像挺快的,呵呵。将ffmpeg源码解压缩到一个目录里,或者check-out 到一个目录里,在来个假设吧,D:/FFMpeg,运行桌面上的MSYS快捷方式,进入MSYS shell 里(如果安装没有创建快捷方式,晕我就不罗嗦了,安装目录里找MSYS.bat)。如果如下命令:

1、$ cd /d/ffmpeg 进入ffmpeg工程目录.

2、$ ./configure --enable-shared --enable-memalign-hack --disable-debug --enable-small

3、$ make

可以了,这是编译结束了,你可以在相应的目录里找到编译好的文件。如果不加--disable-debug --enable-small目标文件可能会很大,我的7M多。我下载的ffmpeg最新版本里有一个错误,在libavcodec目录下的snow.c文件的第3460行,pict->quality= ff_rate_estimate_qscale(&s->m);错误提示参数不够,我改成pict->quality= ff_rate_estimate_qscale(&s->m,0);编译顺利通过。

问题1、目标文件怎么会这么大呢?(其实没啥关系,make install 后会进一步缩小,大概avcodec.dll 1.6M)如果制作网络下载的CAB包可能会大了点。没关系,明天想其他办法了。

问题2、为啥导出这么多函数呢? 可能是我没仔细看MinGW的使用说明吧。有朋友知道MinGW如何制定导出函数麻烦能告诉我一下,谢谢。(转载)

原创粉丝点击