FFMpeg中的实例output_example.c的编译

关于 ffmpeg windows 上的编译,在 www.ffmpeg.com.cn 上有详细的讲解,在成功编译好 ffmpeg 后,便在 MSVC 中编译 ffmpeg 自带的实例 output_example.c
首先自己在 MSVC 下建立一个空的控制台的应用程序,将 output_example.c 加入到工程中。由于在 MSVC 中是使用编译 ffmpeg 时生产的 .lib .dll 文件,所以我们需要连接它们。在这里我们需要 avcodec-51.lib avformat-51.lib avutil-49.lib 这三个静态库,故在我们编译工程之前就将它们加到工程中。
 
编译会发现提示:  Cannot open include file: 'inttypes.h': No such file or directory  的出错信息,可通过如下方法解决:
1
、找到 include 目录中的 ffmpeg\common.h
2
、在 “#define COMMON_H” 之后加入如下代码,同时删除 “#include <inttypes.h>”  然后保存:

#if defined(WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__)
   define CONFIG_WIN32
#endif
#if defined(WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__) && !defined(EMULATE_INTTYPES)
   define EMULATE_INTTYPES
#endif
#ifndef EMULATE_INTTYPES
  include <inttypes.h>
#else
    typedef signed char  int8_t;
    typedef signed short int16_t;
    typedef signed int   int32_t;
    typedef unsigned char  uint8_t;
    typedef unsigned short uint16_t;
    typedef unsigned int   uint32_t;
  ifdef CONFIG_WIN32
        typedef signed __int64   int64_t;
        typedef unsigned __int64 uint64_t;
  else
        typedef signed long long   int64_t;
        typedef unsigned long long uint64_t;
  endif
#endif
 
  再次编译出现错误
     error C2054:  “inline” 之后应输入 “(”
  这样一系列错误,我们只要在 “#define COMMON_H” 之后加入如下代码
 #if defined(WIN32) && !defined(__cplusplus)
#define inline __inline
#endif
  再次编译发现出现error LNK2019: 无法解析的外部符号_snprintf,该符号在函数_main 中被引用
这个连接错误(注意要是没有将开头说的那三个库先加入,这儿出现的连接错误更多)。
分析后知道错误是由第470行
snprintf(oc->filename, sizeof(oc->filename), "%s", filename);
引起的,解决方案如下:
MSVC 2005:
修改为_snprintf_s(oc->filename, _countof(oc->filename), 1024, "%s", filename);
 
MSVC 6.0
修改为_snprintf(oc->filename, sizeof(oc->filename), "%s", filename)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值