【问题标题】:missing include from v4l2, linux vs uapi/linux缺少 v4l2、linux vs uapi/linux 的包含
【发布时间】:2016-09-19 04:01:50
【问题描述】:

我正在学习通过 v4l2-ctl 配置视频设备的 v4l2 API。很久以前的代码示例真的已经过时了,一些定义不再起作用。在 v4l2-utils 中显示了一种从内核请求 API 的所有内容的新方法。我正在尝试将 v4l2-utils 中的一些代码合并到我的代码中。但是,我从编译器收到一个错误:

camera.hpp:1038:8: error: 'struct v4l2_ext_controls' has no member named 'which'

ctrls.which = V4L2_CTRL_ID2WHICH(qctrl.id);

还有:

camera.hpp:1038:43: error: 'V4L2_CTRL_ID2WHICH' was not declared in this scope

ctrls.which = V4L2_CTRL_ID2WHICH(qctrl.id);

该字段和定义位于 linux 源代码树中的一个文件中:/usr/src/linux-4.6.3-gentoo/include/uapi/linux/videodev2.h,但是当我指定该文件时不包含该文件:

#include <linux/videodev2.h>

让编译器包含正确文件的巫术是什么?

我一直在研究 v4l2-utils 源代码,但无法弄清楚。

非常感谢。

【问题讨论】:

    标签: c++ video linux-kernel v4l2


    【解决方案1】:

    位于 /usr/include 的文件已过期。我为内核 4.3 安装了头文件,并且需要更高版本的头文件。我的 gentoo 安装解决方案是为 sys-kernel/linux-headers 添加一个关键字并安装最新的头文件(4.7)。

    事实证明,当 UAPI 文件安装到 /usr/include 时,它​​会成为头文件。我可能也可以在我的 /usr/src/linux 目录中使用 make headers_install 来完成此操作,但我不确定这是否比安装 linux-headers ebuild 更“正确”。我担心冲突。

    希望这对其他人有所帮助...

    【讨论】:

      猜你喜欢
      • 2014-09-19
      • 1970-01-01
      • 2019-11-14
      • 2021-08-26
      • 2018-10-04
      • 2019-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多