我正在编译一个同时使用ffmpeg和Ogre的项目。 现在在Windows上,一切正常。
但是当我想用以下代码行编译文件时:
Ogre::PixelFormat format = Ogre::PF_BYTE_RGBA;
编译器出现以下错误:
error: ‘AVPixelFormat’ is not a member of ‘Ogre’
这在很多方面都很奇怪,因为我不仅使用::指定了Ogre命名空间,而且Ogre中也没有AVPixelFormat。 gcc如何将“PixelFormat”与“AVPixelFormat”混淆?
我怎么能摆脱它?
我喜欢在这里使用int而不是枚举,但是另一个Ogre函数需要格式在Ogre :: PixelFormat中。
答案 0 :(得分:6)
首先使用gcc -E
预处理,然后grep
通过查找AVPixelFormat
或PixelFormat
的文件进行预处理。我怀疑你有一个#define或typedef
漂浮在一起,你只需要找到这种情况发生的地方,并且预编译的源文件就会显现出来。
答案 1 :(得分:3)
问题在于avutil / pixfmt.h:
#define PixelFormat AVPixelFormat
这可以防止用户在自己的代码中的任何位置使用“PixelFormat”一词,即使在命名空间中也是如此。
这是针对仍在使用旧标识符的旧软件的兼容性攻击。
如果您可以编辑代码,解决方案非常简单。只需添加到C ++代码
#define FF_API_PIX_FMT 0
包括ffmpeg标题之前。
这会禁用pixfmt.h标头中的if:
#if FF_API_PIX_FMT
#define PixelFormat AVPixelFormat
...
来源:https://trac.ffmpeg.org/ticket/4216
P.S。我知道这个问题已经过时了,但不知怎的,我觉得没有解决办法,我需要一个解决方案,所以我加了它。