如果外部"C"包含与Qt库发生冲突怎么办?

What to do if extern "C" include collides with Qt libraries?

本文关键字:冲突 怎么办 Qt 外部 包含 如果      更新时间:2023-10-16

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

确切错误:

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

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

编辑:代码部分。

第1部分:Qt视频小部件示例

第 2 部分:基于 dranger 教程的 libffmpeg 的用法

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

由 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>
如果

标头包含C++代码,则不能盲目地将标头"C"外置。即使您通过了该冲突,当您的调用尝试链接到"C"符号但 ffmpeg 库通过链接导出它们时,您也会在链接时遇到问题C++。

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