我正在尝试链接到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'
答案 0 :(得分:3)
您确实将它们包含在extern "C"
权利中吗?
extern "C" {
#include <libavutil/imgutils.h>
#include <libavcodec/avcodec.h>
#include <libswscale/swscale.h>
}
答案 1 :(得分:1)
#define smprintf _snprintf
即便如此,timestamp.h可能会重新划分它或包含一些内容。