mingw下使用vs2015编译器编译FFMPEG

由于工作原因,需要在MINGW下编译出一个单独完整的FFMPEG 功能库(而不是avcodec/avformat等很多库)提供给WINDOWS UI使用。 
折腾了好几天,下过msys2,ming64,都没有成功,貌似国外的网站访问这些资源速度很慢。
最后使用vs2015+mingw1.0来解决这个问题。
过程如下记录如下。

一、mingw下编译ffmpeg

考虑了如下几种方案:

1.修改ffmpeg的makefile,使它能生成一个单独的DLL。也许这种方法是最好的,但是本人对MAKEFILE不熟悉,望而却步。
2.编译成静态库,再创建一个VS(2010、2013)的DLL功能对起进行封装。 众所周知,MINGW编译出的静态库需要libgcc.a、libmingwex.a、libcoldname.a
而且需要注意链接顺序,网上多数开发者的经验是MINGW生成的静态库兼容性不好,经常出现程序崩溃,所以放弃这种方案。
3.使用vs工具链来进行编译。由于 vs2013之前的版本不支持c99语言,故需要配置
C99-to-C89 Converter & Wrapper (http://ffmpeg.org/platform.html#Microsoft-Visual-C_002b_002b-or-Intel-C_002b_002b-Compiler-for-Windows)。
本人按照步骤做的,但是编译时还是不认识c99语法。 只能下载最新的vs2015来进行编译。
mingw的配置在此不做描述,网络有很多的参考。这里主要记录在mingw下用vs2015编译时碰到的一些问题以及解决方法。


环境:mingw1.0/vs2015/ffmpeg2.3
1. ./configure --enable-static --toolchain=msvc
2. make
   一开始就碰到了如下错误:
   
  问题1
  C:\Program Files (x86)\Windows Kits\10\include\10.0.10150.0\ucrt\stdio.h(1419):
note: 命令行参数: 参见前面的“vsnprintf”定义
C:\Program Files (x86)\Windows Kits\10\include\10.0.10150.0\ucrt\stdio.h(1421):
fatal error C1189: #error:  Macro definition of vsnprintf conflicts with Standa
d Library function declaration

经查找,原来是生成的config.mak文件里CPPFLAGS= -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_WIN32_WINNT=0x0502 -Dstrtod=avpriv_strtod -Dsnprintf=avpriv_snprintf -D_snprintf=avpriv_snprintf -Dvsnprintf=avpriv_vsnprintf
有snprintf的定义。本人对linuix不熟悉,只能简单把
-Dsnprintf=_snprintf
   -Dsnprintf=avpriv_snprintf -D_snprintf=avpriv_snprintf -Dvsnprintf=avpriv_vsnprintf
   定义去掉,再make。也许有更好的解决方法。

问题2
compat\msvcrt\snprintf.c文件需要#include "snprintf.h",否则提示
avpriv_vsnprintf未定义

CC      libavutil/../com
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值