win下编译ffmpeg库,Compile and build ffmpeg library and dll on Windows x64( 正版)

转载请注明:来自EricKing,thanks

从没想到编一个library这么坑爹,再次提醒各位百度的东西只能参考,想节约时间还是要到官网上去查看docum。不废话了,开始详细过程:

——》1.搭建Win下的GCC编译环境(因为win下vs不支持ffmpeg的compile 和build,官网上也有说这一点)

——》2.下载latest ffmpeg source(后面附官网地址),想办法将编译后的文件做成dll,这是win下编程调试的核心

          (这里就用到vs下的一个vc的bash文件叫vcvars32.bat,注意不管你的系统是32的还是x64的,这个bash都可以完成生成dlsl)

——》3.compile and build(这里要做好路径的设置,第一步里完成,同时学会分析config.log这个文件,发现自己到底是gcc没配好,还是一些解码库没有,或者是common.h的问题,当然common.h的问题多是在make时报出问题的,而gcc没配好,在config时就会报:gcc is unable to create an executable file.If gcc is a cross-compiler, use the --enable-cross-compile option.这是第一步没有弄好)。最后,一个重要的技巧是,轻量化自己的ffmpeg开发库。就是在make后,再做一部make install操作。这一步主要是完成include file和dll的优化,从make结果中已经生成好的dll,lib等。

ok,有了大致的概念,下面就是详细步骤(这里有参考网络的资料,但是有重要的不同,请务必注意):

1.搭建在win上的GCC:

 准备编译环境MinGW:http://sourceforge.net/projects/mingw/files/,点击Download mingw-get-setup.exe,请采用了默认安装,路径C:MinGW;安装mingw,在管理器里选择必要的gcc、msys等选项。至于ada和frotan选项,最好不要选,安装费时,至此编译环境基本具备,下边就是配置相关的编译工具。 

2.到官网下载最新的ffmpeg source:http://ffmpeg.zeranoe.com/builds/source/ffmpeg/,为了安全起见,请用7-zip这一解压软件去解压,如果你非要右键解压,我也没意见,就是存在一些解压后文件出问题的情况,损坏一些ffmpeg文件,不过这个风险有一些概率问题存在,这里只能给暴力的你一点祝福吧。

下一步,(注意:这一步可以做,也可以不做)下载最新的yasm:http://yasm.tortall.net/Download.html

选择对应你系统的yasm.exe  (我的系统是win7 32位的选择的Win32.exe);

将下载的yasm*.exe改名为yasm.exe(x64也改成这个,但是除了放到system32下,也请放到SysWOW64下) 放入C盘下/windows/system32/目录下,这样就省去了环境变量的设置 。

ps:如果在后面的configure ffmpeg时报gcc路径不对的问题(具体得查看log,来精确断定是这一问题),那请这么做:

打开计算机的属性--》环境变量--》给系统级的环境变量PATH添加2个变量,C:MinGWmsys1.0;C:MinGWmsys1.0in

下一步,进入mingw安装目录下:C:MinGWmsys1.0找到msys.bat文件,记事本打开编辑(这里推荐安全的notepad++来编辑,因为win txt editor编辑bash,save时可能会出现问题),在最前边加上一行:

call "C:Program Files(x86)Microsoft Visual Studio 11.0VCinvcvars32.bat"

这样做的目的是链接VS,来生成window下的库文件。上面的路径是对应你装的VS路径,我的环境是VS2012。注意:这一行必需处在此文件的最开始处(把它放到除去rem开头之外的最前面不能正常工作,是因为win下MinGW在遇到echo后不默认运行后面的配置)。如果是你的os是x64位的,还需要对该文件的 _WindowsNT 处进行修改,紧跟这一行的下面一行添加:

rem Hopefully a temporary workaround for getting MSYS shell to run on x64

rem (WoW64 cmd prompt sets PROCESSOR_ARCHITECTURE to x86)

if not "x%PROCESSOR_ARCHITECTURE%" == "x64" goto _NotX64

set COMSPEC=%WINDIR%/SysWOW64/cmd.exe

%COMSPEC% /c %0 %1 %2 %3 %4 %5 %6 %7 %8 %9

goto EOF

:_NotX64

 注意:这里第三句,要看清楚了自己的cpu内核到底是AMD的还是intel的,如果是后者,就向这样就ok了,如果是AMD的就将“x64”改为“xAMD64”,这里这么做无法就是要引导gcc使用正确的cpu。我就是按百度的结果,没有看官网,导致gcc一直路径不对,自坑的娃都是泪啊!

Ok,上面都做完了,就进入compile了:

3.Compile and build:

进入C:MinGWmsys1.0,双击msys.bat启动MSYS, 这时候就进入了你比较熟悉的类似Linux环境了,这个环境下允许类似Linux的bash操作,接着进入下载的ffmpeg目录

在ffmpeg目录下 执行:

1.static lib:

./configure --disable-shared --enable-static --enable-decoder=h264 --enable-memalign-hack

2.dynamic lib:

./configure --enable-shared  --enable-decoder=h264  --enable-memalign-hack

 (ps:每次config前最后clean一下,命令:make distclean ;如果要compile ffmpegpaly,还需要下载DSL,解压出相应的bin,lib,include内容,copy到指定的msys/1.0/bin,lib,include下,同时要对bin下的sdl-config用notepad++修改一下他的prefix = C:/MinGW,config的时候,gcc会自动打开sdl)

(waiting for config……)

这里值得注意的是,--enable-memalign-hack选项是FFmpeg在Windows上编译成功所必须指定的,参数设置的时候有一定的顺序,有可能造成后面make失败,这里的几个命令,你没必要紧张,只要有最后一项,其他的以后用到再重新config都没问题。

当然,configure的参数可以根据需要自己设定,执行./configure --help 查看参数详情。

make

   开始生产lib,dll等……

make install(最好去做这一步,难得的自动打包。。。)

ok,在C:MinGWmsys1.0的bin,include和lib目录下生成了最新的.lib和.dll库文件,不是网上很多说的在local下,否则找死你啊。。。。,接下来就可以在window平台下调用库并开发ffmpeg的应用了。

Thanks from Ericking,enjoy it.最后ps一句,尊重版权,不只是我写得这篇,更有ffmpeg的开源GPL协议。因为他们的耻辱柱上曾经或者现在还挂满了我国的某些著名互联网公司,哈哈。。。

原文地址:https://www.cnblogs.com/erickingxu/p/3794507.html