用MinGW编译ffmpeg

转自:http://hi.baidu.com/yeyingxian/blog/item/a03576d966b2892910df9b28.html

 

1. 下载各种工具包。
MinGW的官方网址是
http://sourceforge.net/project/showfiles.php?group_id=2435
但是sourceforge经常会被电信封杀,需要找外国的代理服务器来访问。后备网址
http://gd.tuwien.ac.at/gnu/mingw/?fisel=0-9,a-z,A-Z
后备网址上面的版本都比较古老。我用的是
MinGW-3.1.0-1.exe
MSYS-1.0.10.exe
bash-3.1-MSYS-1.0.11-1.tar.bz2
coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2

mingw-runtime-3.14.tar.gz
gcc-core-4.2.1-sjlj-2.tar.gz
binutils-2.18.50-20080109-2.tar.gz
make-3.81-MSYS-1.0.11-2.tar.bz2
msysDTK-1.0.1.exe


2. 安装MinGW。它是用来提供windows下可用的GCC等编译工具。我选MinGW-3.1.0是因为它的安装包包含了完整的组件。而4.0以后的版本安装包都要通过网络来下载待安装的组件。


3. 安装MSYS,提供了Unix风格的命令行终端。安装的过程中会提示输入MinGW的安装目录。需要注意一下,输入格式如 C:/MinGW


4. 把bash.exe解压到msys/bin目录下。ffmpeg的configure脚本是用bash写的。


5. 把coreutils中的lpr.exe解压到msys/bin目录下。编译的脚本需要用到


6. 修改msys.bat,在最前面加入
call "C:/Program Files/Microsoft Visual Studio 8/VC/bin/vcvars32.bat"
当然,不同版本的VC,vcvars32.bat所在的目录会有点不同。加入这句是让ffmpeg调用VC的link,生成VC可用的lib。
进入msys环境,输入link回车,看看输出的是不是VC的link命令的帮助,测试环境配置是否正确。
如果只是为了生成ffmpeg.exe而不是使用libavcodec等dll,可以跳过这步


7. 编译之前还要对MinGW的几个组件进行更新。首先把mingw-runtime更新到3.10以上版本,否则在在编译的过程中,可能会遇到错误
utils.o:utils.c:(.text+0x4949): undefined reference to `gettimeofday'

然后要把gcc更新到4.2以上的版本,否则在VC下调用mingw编译出的dll的时候,ffmpeg会警告
Compiler did not align stack variables. Libavcodec has been miscompiled
更新gcc只需要更新core部分

更新gcc以后,binutils也要进行更新,否则编译过程中可能遇到错误
Error: unknown pseudo-op: `.secrel32'

编译2008年以后的ffmpeg,make也要更新,否则编译中会遇到
make: *** No rule to make target `libavdevice/avdevice.dll', needed by `all'. Stop.


8. 进入msys环境,进入ffmpeg的目录搞好编译配置
Debug版本 ./configure --enable-memalign-hack --enable-shared --disable-static --disable-optimizations --extra-cflags=-O1
Release版本 ./configure --enable-memalign-hack --enable-shared --disable-static --disable-debug
msys中,把目录切换到D:/是cd /d

9. make编译

http://cekirdek.pardus.org.tr/~ismail/ffmpeg-docs/files.html


编译外部库
1、liba52,支持AC3解码。
ffmpeg也自带ac3解码器,不过要--enable-gpl才能使用。相比而言,liba52解码速度会更快。
http://liba52.sourceforge.net/files/a52dec-0.7.4.tar.gz
解压包,进入所在目录
./configure
make
make install

2、libamr,支持AMR_NB、AMR_WB解码
需要把unzip.exe、wget.exe添加到mingw/bin目录下(注意不要放在msys/bin,这里只能放msys自有的程序)
http://downloads.sourceforge.net/gnuwin32/unzip-5.51-1-bin.zip
http://gd.tuwien.ac.at/gnu/mingw/wget-1.9.1-mingwPORT.tar.bz2
然后下载libamr
http://ftp.penguin.cz/pub/users/utx/amr/amrnb-7.0.0.2.tar.bz2
http://ftp.penguin.cz/pub/users/utx/amr/amrwb-7.0.0.3.tar.bz2
分别解压,运行
./configure --disable-shared
make
make install

3、libfaad,支持AAC解码
下载最新的faac、faad2源码包
http://www.audiocoding.com/downloads.html
编译这两个库需要用autoconf工具,在msysDTK-1.0.1.exe中。注意msysDTK中的make.exe版本比较老,装完msysDTK后要及时更新make。
编译faad2
autoreconf -vif
./configure --with-mp4v2 --disable-shared
make
make install
编译过程中会有error,但可以不用管它,此时libfaad已经好了


ffmpeg在configure的时候要增加一些额外的参数
--enable-gpl --enable-nonfree --enable-liba52 --enable-libamr-nb --enable-libamr-wb --enable-libfaad --extra-ldflags=-L/usr/local/lib --extra-cflags=-I/usr/local/include

重新configure的之前最好先把config.mak以及config.h删掉

你可能感兴趣的:(用MinGW编译ffmpeg)