如果extern“C”包含与Qt库冲突怎么办?

时间:2014-02-18 12:53:01

标签: c++ qt namespaces ffmpeg extern

就我而言,我正在尝试使用QtMultimedia和libffmpeg作为解码器。 导入ffmpeg为extern“C”,但ffmpeg的AVPixelFormat与QVideoFrame的PixelFormat相撞。

确切错误:

  

'AVPixelFormat':不是'QVideoFrame'的成员

有谁知道可能的解决方案?

编辑:代码部分。

第1部分:Qt VideoWidget Sample

第2部分:基于dranger tutorial

的libffmpeg的使用
extern "C"
{
    #include <libavcodec/avcodec.h>
    #include <libavformat/avformat.h>
    #include <libswscale/swscale.h>
}

2 个答案:

答案 0 :(得分:0)

如果标题包含C ++代码,则不能盲目地将“C”标记为“C”。即使您通过该冲突,当您的调用尝试链接到“C”符号但ffmpeg库使用C ++链接导出它们时,您将在链接时遇到问题。

如果您正在尝试导出C符号,我的建议是创建一个导出C的包装函数,但将C ++调用放入库中。

答案 1 :(得分:0)

这是由FFmpeg pixfmt.h中的以下行引起的:

#define PixelFormat AVPixelFormat

您可以尝试以下技巧:

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

#undef PixelFormat
#include <qt headers>