织梦CMS - 轻松建站从此开始!

罗索

采用ffmpeg静态库连接的视频应用工程调试

jackyhwei 发布于 2011-08-13 23:47 点击:次 
如何使用ffmpeg静态库,以及一些ffmpeg相关的常见问题
TAG:

采用ffmpeg静态库连接的视频应用工程调试(*.a文件的使用)
 
  说明:1. 在MinGW/MSYS下,如果说我们要用ffmpeg的静态库本质上意味着我们用ffmpeg编译后的LIBxxxx.a
           文件,(不是令人误解的lib文件,此处均用LIBxxxxx.a)
        2.实际上生成动态库有更大的优越性,有了动态库,lib文件,h文件,就没有其它的依赖了。
          libxxx.a本质上是object文件的归档,可能对其他库有依赖。一旦存在这种依赖,有可能
          要把很多东西拖进来编译。
 
 
准备工作:
       $ ./configure --enable-memalign-hack --enable-ffserver --enable-network --enable-protocols --enable-muxers --disable-yasm --enable-static --disable-shared --enable-w32threads --extra-cflags=-fno-reorder-functions 
 
       
       $ make 
       $make install (libavformat.a, libavcodec.a等会被拷贝到\MinGW\lib
动作:
  1)选用ffmpeg SDK中的实例output_example_ffmpeg_SDK
  2) 把原来工程的配置信息修改
      2.1) 工程-〉属性 -〉Linker-〉Input, 修改加入如下*.a文件:
             libavformat.a libavcodec.a libavutil.a libswscale.a  // 编码相关
             libmingwex.a                                         // MinGW环境相关
             libgcc.a                                             // G++库
             libmoldname80d.a                                     // 其他文件
 
      2.2)项目-〉工程-〉Linker -> General - > Additional Library Directories
           加入如下目录:
               2:\MinGW\lib\gcc\mingw32\4.5.2   ----〉MinGW中Gcc库
               3:\MinGW\lib                     -->  MinGW自己的库   
               4:d:\minGW\mysys\1.0\local\lib  -->  ffmpeg编译make install后拷贝到此地的静态库文件(*.a)  
      2.3) 报错和解决
               1) 不认识guess_format.             解决:  #define guess_format  av_guess_format 
               2)不认识av_alloc_format_context   解决:  #define   av_alloc_format_context  avformat_alloc_output_context
      2.4) 重新编译报错
               1)error LNK2019: unresolved external symbol _sws_scale referenced in function _write_video_frame
                                output_example.obj  -〉output_example_ffmpeg_sdk
               2)error LNK2019: unresolved external symbol _sws_getContext referenced in function _write_video_frame
                      output_example.objoutput_example_ffmpeg_sdk
               3)error LNK2019: unresolved external symbol __imp____lc_codepage referenced in function _wcsrtombs
                       libmingwex.a output_example_ffmpeg_sdk
               4)error LNK2001: unresolved external symbol __imp____lc_codepage libmingwex.a output_example_ffmpeg_sdk
 
           解决:  
               1)添加libswscale.a -> 解决错误1,2
               2)$ ar -d libmingwex.a wcrtomc.o
                  $ ar -d libmingwex.a  mbrtowc.o   ---〉清楚mbrtowc/wcrtomc.o出libmingwex.a
 
              说明:这只是临时的walkaround,做前备份,做完后恢复,否则可能影响下一次编译。
                    我做完静态编译ffmpeg后,试了一次动态编译,马上完蛋,恢复原来的库文件才通过。
 
      2.5) 编译成功,运行 (成功替换ffmpeg SDK工程中)
 
一些猜测:
   1)用Visual Studio带的lib命令,运行
            $lib   libxxxx.a  
      会自动生成一个libxxxx.lib文件,也许这个文件可以直接放到Visual Studio工程中和普通lib文件一样
      使用。网上有说法“实际上最常用的lib是由lib.exe把*.obj生成的lib。”,既然*.a文件不过是*.o文件
      的打包,估计Microsoft支持直接从*.a生成*.lib文件
   2)网上似乎有直接转化*.lib到*.a的工具
(xgzhang )
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201108/14848.html]
本文出处:blog.sina.com.cn/xgzhang  作者:xgzhang
顶一下
(2)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容