Ffmpeg标头不在Windows中编译

时间:2013-05-29 22:09:58

标签: c++ c windows ffmpeg

我正在尝试链接到Windows下的ffmpeg,但遇到了困难。包含ffmpeg标头会导致数百个编译错误,我无法轻易修复。

1)timestamp.h使用snprintf而不是_snprintf。我试图将其添加为宏,如下所示:

#ifdef Q_OS_WIN
#define snprintf _snprintf
#endif

#define __STDC_CONSTANT_MACROS 
namespace ffmpeg { 
extern "C" {
#include <libavutil/imgutils.h>
#include <libavutil/samplefmt.h>
#include <libavutil/timestamp.h>
#include <libavformat/avformat.h>
#include <libswscale/swscale.h> 
} }

但它没有帮助。为什么宏不会在里面传播?

2)再次,PRId64没有定义。我在包含timestamp.h之前定义了__STDC_CONSTANT_MACROS,但是没有从inttypes.h中检索定义

在编译器输出中,它看起来像:

ffmpeg\include\libavutil/timestamp.h(42) : error C3861: 'snprintf': identifier not found

ffmpeg\include\libavutil/timestamp.h(42) : error C2146: syntax error : missing ')' before 

标识符'PRId64'

2 个答案:

答案 0 :(得分:3)

您确实将它们包含在extern "C"权利中吗?

extern "C" {
#include <libavutil/imgutils.h>
#include <libavcodec/avcodec.h>
#include <libswscale/swscale.h>
}

答案 1 :(得分:1)

这是一个错字吗?你谈的是“snprintf”(“n”,而不是“m”)。

#define smprintf _snprintf

即便如此,timestamp.h可能会重新划分它或包含一些内容。