如果外部"C"包含与Qt库发生冲突怎么办?
What to do if extern "C" include collides with Qt libraries?
就我而言,我正在尝试使用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++调用到库中。
相关文章:
- 写入位置0x0000000C时发生访问冲突
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 链表中写入访问冲突的未知原因
- C++中的openCV Mat访问冲突
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- C++尝试深度复制唯一指针时出现内存访问冲突
- 如果我想在没有更新编译器的情况下使用新功能,该怎么办?
- 错误:使用通用引用的声明冲突
- 如何解决GTest和LibTorch联动冲突
- 两个运营商的一些奇怪的冲突<<
- 如何在多个线程中创建 QSql数据库连接时防止名称冲突
- C++ 中动态二维数组的访问冲突
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- C++17 十六进制浮点文字单精度后缀冲突?
- 如果外部"C"包含与Qt库发生冲突怎么办?
- C++当命名空间、类名和命名空间::类名冲突时该怎么办
- 即使在使用名称空间之后,如果名称冲突,该怎么办