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