windows系统下编译最新版本ffmpeg

最近因为工作的关系需要用到ffmpeg,在网上查了一下发现许多介绍windows下编译ffmpeg文章在安装mingwmsys过程比较繁琐,现吧自己编译过程记录下来

 

1.安装MingwMsys

 

首先去http://sourceforge.net/projects/mingw/files/下载一个mingw的安装文件我下载的是mingw-get-inst-20120426.exe,下载到本地后直接运行安装程序,在“Select Components”步骤中选择:

    √  C Compiler (默认且一定选择)

    √  C++ Compiler

    √  MSYS Basic System(选择此项将会安装msys,msys则不需要另外安装)

    √  MinGW Developer ToolKit

记住要选中MSYS Basic System这个选项安装Msys,这样就不用再去安装Msys了,这个安装过程有点长,和你的网络有关,要耐心等待,经常会出现半死不活状态,网上有些加速的方法自己找一下,我是睡觉前运行好去睡觉的,第二天早晨已经安装好了,呵呵,不过说实话这个安装包很贴心了,会吧MigwMsys一次都安装好,不要象以前安装那样麻烦了要下NN多得包,比较适合我这样的懒人….

 

2. 整合MSYSMINGW

       1. 修改Msys.bat

       为了方便VS200X以调用ffmpeg的动态库,可以通过配置让ffmpeg编译时产生windows下调用dll对应的lib

    进入:D:\MinGW\msys\1.0\文件夹,使用UltraEdit打开msys.bat文件,在文件的最最前面加入如下一行:

    call "D:\Program Files\Microsoft Visual Studio 8.0\VC\bin\vcvars32.bat"

其中“D:\Program Files\Microsoft Visual Studio8.0”为你机器上安装VS的目录,我的电脑安装的是VS2005,并且安装在了D盘。文件修改后保存即可。

      2. 系统整合:

        D:\msys\1.0\etc\文件夹下的fstab.sample文件改名,改成fstab,然后,用文本编辑器打开fstab.

 把这行:C:/mingw /mingw改为:d:/mingw  /mingw

在这个步骤中,大家要注意,并不是每个人的都是d:/mingw  /mingw,也有可能是d:/msys/1.0/mingw /mingw,这个与版本有关,大家注意看自己的就OK了。

 

3. 下载ffmpeg源码:

       下载安装一个SVN获取源码,本人下载的TortoiseSVN,安装后右键点击在弹出菜单中选择SVN checkout弹出界面中填写 

       URL of repository: svn://svn.mplayerhq.hu/ffmpeg/trunk

      Checkout directory:要存放下载代码的目录

   点击OK即可

 4.下载yasm

     为了减少配置环境变量的麻烦,本处直接把 yasm-1.1.0-win32.exe文件名修改成:yasm.exe,并放到系统目录下:       C:\WINDOWS\system32

5. 说明:

       Mingw中切换目录和windows命令行窗口不同:

$cd /d                                           进入D盘目录

$cd /d/project/ffmpeg/sourcecode              进入d:\ project\ffmpeg\sourcecode


6. 编译ffmpeg:

        进入ffmpeg源码目录输入命令编译

       $./configure --enable-memalign-hack  

   长时间等待,如果没有错误就可以进入下一步

   $make 

   长时间等待。。。

   $make install 

   会复制所有生成的重要文件到MSys的local文件夹下

      如果要想编译得到动态库和上面的编译还是有点差别, 编译ffmpeg的动态库有两种方式一种是静态是指把其他的库编译到ffmpeg得库中,动态的是编译时不编入ffmpeg库中,不要把这个和ffmpeg库本身动态和静态搞混了,编译命令如下:

      $make distclean   清除上面编译过程生成的文件

      动态编译命令

      $./configure --enable-shared --disable-static --enable-memalign-hack

      $make

      静态编译命令

      $./configure --enable-static --disable-shared --enable-memalign-hack

      $make

      编译生成的文件可以再VC中调用,注意编译时使用的VC版本和调用的版本要兼容,如使用VC9编译的动态库在VC8中调用就会出现找不到函数接口的问题

 

5. 编译过程中遇到的文件及解决:

1.       Configure时发现提示pr命令不认识解决办法下载make-3.81-MSYS-1.0.11-2.tar.bz2解压到mingwMingw/msys/1.0/目录下,也可以修改prlpr即可

 

2.       提示strcasecmp函数错误

把以下代码存储成strcasecmp.hmingw include目录下

//strcasecmp.h

#ifndef _strcasecmp_h_

#define _strcasecmp_h_

static inline char __hack_charget( char c )

{

if(c >= 'a' && c <= 'z')

c += 'A' - 'a';

return c;

}

 

static inline int hack_strcasecmp( char const *a, char const *b )

{

char ac, bc;

int r;

for(;;) {

ac = __hack_charget(*a++);

bc = __hack_charget(*b++);

r = (int)ac - (int)bc;

if(r)

return r;

 

if(!ac)

return 0;

}

}

 

static inline int hack_strncasecmp( char const *a, char const *b, int n )

{

char ac, bc;

int r, i;

 

for(i = 0; i < n; ++i) {

ac = __hack_charget(*a++);

bc = __hack_charget(*b++);

r = (int)ac - (int)bc;

if(r)

return r;

 

if(!ac)

return 0;

}

return 0;

}

 

#define strcasecmp hack_strcasecmp

#define strncasecmp hack_strncasecmp

#endif

strcasecmp.h包含到编译是提示错误的文件中即可

3.       编译后没有ffplay.exe文件:

因为没有SDL所以没生产成,下载SDL-1.2.14.tar.tar解压到ffmpeg目录下,启动msys.bat进入SDL解压后的目录编译安装SDL

 

$./configure --prefix=/usr    回车等待…

$Make                  回车等待…

$make install             回车等待…

 编译完成后,在C:\MinGW\msys\1.0binincludelib文件夹下可以看到编译结果,拷贝编译后文件到ffmpeg目录

MinGW\msys\1.0\bin下的SDL.dllsdl-config拷贝到 ffmpeg\sourcecode\bin

MinGW\msys\1.0\include下的 SDL文件夹拷贝到 ffmpeg\sourcecode\include

MinGW\msys\1.0\lib下的libSDL.alibSDL.dll.alibSDL.lalibSDLmain.a拷贝到 ffmpeg\sourcecode\lib

如果对应的目录在ffmpeg\sourcecode没有直接创建

4. 编译成功后没有生成对应的库文件

     a.没有生成lib文件

         编译后没有生成lib文件,但是在目录下生成了对应的def文件可以使用VC自带的lib.exe 由def文件生成lib文件,lib.exe在VC的bin目录中

       cd C:\Program Files\Microsoft Visual Studio 8.0\VC\bin      

         lib /out:c:\test\avcodec.lib /machine:IX86 /def:C:\test\avcodec.def

     b.没有dll和lib文件或者没有def

            我编译ffmpeg 0.6.1版本成功后进入ffmpeg061/sourcecode对应目录下没有找到预期的dll和lib文件,google之后发现原因是因为config.mak文件的问题用, 在执行完 ./configure xxoo命令后,在源码目录中用 UltraEdit打开config.mak编辑以下三行:

           SLIBNAME=$(SLIBPREF)$(FULLNAME)$(SLIBSUF)
           SLIBNAME_WITH_VERSION=$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)
          SLIBNAME_WITH_MAJOR=$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)

         修改为

         SLIBNAME=$(SLIBPREF)$(NAME)$(SLIBSUF)
         SLIBNAME_WITH_VERSION=$(SLIBPREF)$(NAME)$(SLIBSUF)
         SLIBNAME_WITH_MAJOR=$(SLIBPREF)$(NAME)$(SLIBSUF)

 重新编辑,发现dll.lib文件已经生成^_^.

以上内容从网上搜集整理,如有错误恳请指正。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值