首先推荐
http://ffmpeg.zeranoe.com/builds/
, 这里已经有编译好的动态连接库。可惜上面没静态链接库。我也试过 DLL2Lib, 但是无法连接LIBCMT库,只能使用MSVCRT
所以一定要静态库的话只能自己编译了。在Windows上用MinGW编译真是个痛苦的过程,没有yum install和apt-get,所有的依赖项要自己找全。
废话少说,下面是编译过程,记录于此。
本文地址: http://blog.csdn.net/wangjia184/article/details/7931164
首先 下载安装
MinGW
, 比较赞的是,现在它提供自动化的安装配置程序,相比以前大大简化了安装过程,连fstab都帮你配置了。
安装完成后编辑
MinGW\msys\1.0\msys.bat
批处理, 在文件最前面加入一行,调用 Visual Studio的
vcvarsall.bat
批处理设置环境变量
-
call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"
本文地址: http://blog.csdn.net/wangjia184/article/details/7931164
接着在MinGW的下载站点上 下载安装 g++,我下载的版本是4.6.2,覆盖到MinGW目录即可.
http://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version4/gcc-4.6.2-1/gcc-c%2B%2B-4.6.2-1-mingw32-bin.tar.lzma/download
yasm
Win32 版本,将文件重命名并分别复制2份到
MinGW\bin\yasm.exe
和
MinGW\bin\nasm.exe
, 后面很多编译的项目依赖于它们.
执行
msys.bat
, 在命令行窗口中切换到打算编译的目录。比如我的在L盘, 则使用
cd /L/
进入, 其它文件命令与Linux一致。
准备活动到此结束,下面就开始漫长的编译过程了。
本文地址: http://blog.csdn.net/wangjia184/article/details/7931164
编译依赖项
(下面的版本号是我编译的时候的版本号,不一定必须是这个版本号)
1. Zlib 1.2.7
下载源代码
http://zlib.net/
解压后:
-
cd zlib-1.2.7/
-
make -f win32/Makefile.gcc
-
cp -iv zlib1.dll /mingw/bin
-
cp -iv zconf.h zlib.h /mingw/include
-
cp -iv libz.a /mingw/lib
本文地址: http://blog.csdn.net/wangjia184/article/details/7931164
2. libgsm 1.0.13-3
下载源代码,
http://libgsm.sourcearchive.com/
,
解压后:
-
cd gsm/
编译到一半的时候出现 fchmod 和 fchown 的编译错误,不管它,继续执行:
-
mkdir /mingw/include/gsm
-
cp inc/gsm.h /mingw/include/gsm
-
cp lib/libgsm.a /mingw/lib
本文地址: http://blog.csdn.net/wangjia184/article/details/7931164
3.
LAME 3.99.5
下载源代码,
http://sourceforge.net/projects/lame/files/lame/
, 解压后:
-
./configure
--prefix
=
/mingw
--enable-expopt
=
full
-
make install
本文地址: http://blog.csdn.net/wangjia184/article/details/7931164
4. LIB
OGG 1.3.0
下载源代码,
http://xiph.org/downloads/
,解压后:
-
./configure --prefix
=
/mingw
-
make install
本文地址: http://blog.csdn.net/wangjia184/article/details/7931164
5. LIBVorbis 1.3.3
下载源代码,
http://xiph.org/downloads/
,解压后:
-
./configure --prefix
=
/mingw
-
make install
本文地址: http://blog.csdn.net/wangjia184/article/details/7931164
6. LIBSpeex 1.2rc1
下载源代码,
http://xiph.org/downloads/
,解压后:
-
./configure --prefix
=
/mingw
-
make install
本文地址: http://blog.csdn.net/wangjia184/article/details/7931164
7. LIBTheora 1.1.1
下载源代码,
http://xiph.org/downloads/
,解压后:
-
./configure --prefix
=
/mingw
-
make install
本文地址: http://blog.csdn.net/wangjia184/article/details/7931164
8. FAAC 1.2.8
下载源代码,
http://www.audiocoding.com/downloads.html
,解压后:
首先编辑
Makefile.am
文件,将第一行 改为
SUBDIRS
=
include libfaac
然后修改configure.in文件, 找到最后一段的 AC_OUTPUT, 修改为
AC_OUTPUT(libfaac/Makefile include/Makefile Makefile)
-
./configure --prefix
=
/mingw
-
make install
本文地址: http://blog.csdn.net/wangjia184/article/details/7931164
9. xvidcore 1.3.2
下载源代码,
http://www.xvid.org
,解压后:
-
cd xvidcore/build/generic
-
./configure --prefix
=
/mingw
执行到这里后,搜索
xvidcore/build/generic
目录下面所有文件中的
-mno-cygwin
这个选项, 这个选项已经不被GCC支持,全部删除后继续。
-
make install
-
cp -iv \
=
build/xvidcore.dll.a /mingw/lib/libxvidcore.dll.a
本文地址: http://blog.csdn.net/wangjia184/article/details/7931164
10. x264 snapshot-20120830-2245
下载源代码,
http://www.videolan.org/developers/x264.html
,解压后:
-
configure --prefix
=
/mingw --enable-win32thread --extra-cflags
=
"-DX264_VERSION
=
20100422"
-
make install
-
cp -iv x264.h x264_config.h /mingw/include
-
cp -iv libx264.a /mingw/lib
-
cp -iv x264.pc /mingw/lib/pkgconfig
本文地址: http://blog.csdn.net/wangjia184/article/details/7931164
编译ffmpeg 0.11.1
相信有耐心进行到这里的人,已经花了1-2个小时了,这是正常的速度。终于可以编译ffmpeg了.
下载源代码,
http://ffmpeg.org
,解压后首先配置,光这个自动配置过程也要十分钟左右。
-
./configure --prefix
=
/mingw --enable-gpl --enable-nonfree --enable-postproc --enable-avfilter --enable-w32threads --enable-runtime-cpudetect --enable-memalign-hack --enable-bzlib --enable-libfaac --enable-libgsm --enable-libmp3lame --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-zlib --disable-debug
然后 make & make install 等着编译结束吧。
本文地址: http://blog.csdn.net/wangjia184/article/details/7931164
链接
链接静态库需要注意链接的顺序, 我的VC版本是VS2010
#ifdef __cplusplus
extern
"C"
{
#endif
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libavutil/avutil.h>
#include <libswscale/swscale.h>
#ifdef __cplusplus
#endif
#pragma comment( lib, "libgcc.a")
#pragma comment( lib, "libmingwex.a")
#pragma comment( lib, "libcoldname.a")
#pragma comment( lib, "libavcodec.a")
#pragma comment( lib, "libavformat.a")
#pragma comment( lib, "libavutil.a")
#pragma comment( lib, "libswscale.a")
#pragma comment( lib, "libz.a")
#pragma comment( lib, "libfaac.a")
#pragma comment( lib, "libgsm.a")
#pragma comment( lib, "libmp3lame.a")
#pragma comment( lib, "libogg.a")
#pragma comment( lib, "libspeex.a")
#pragma comment( lib, "libtheora.a")
#pragma comment( lib, "libvorbis.a")
#pragma comment( lib, "libvorbisenc.a")
#pragma comment( lib, "libx264.a")
#pragma comment( lib, "xvidcore.a")
#pragma comment( lib, "wsock32.lib")
#pragma comment( lib, "vfw32.lib")