在this example header file的第63行,有一个typedef:
typedef struct _snd_ctl_elem_info snd_ctl_elem_info_t;
通过代码有类似的typedef的例子。
我的目标是获得结构_snd_ctl_elem_info
的实际定义,但我已经使用了源代码并使用Google搜索,但没有找到实际定义的痕迹。由于这种搜索失败,我开始认为我可能会遗漏一些概念,它可能与内核和向后兼容性有关吗?
我的动机是能够gdb逐步通过alsa并对结构进行概述。
这是某种形式的低级结构定义模式吗?
答案 0 :(得分:1)
听起来它是从typedef重命名的:
#define _snd_ctl_elem_info sndrv_ctl_elem_info
因此,您正在寻找sndrv_ctl_elem_info
,这样更容易找到。
在asound.h
第809行定义。
It's pretty massive所以我不会在这里粘贴它。
答案 1 :(得分:1)
这个结构也被alsa-lib用来与内核通信,所以它只是重用了内核的定义。
内核头文件将安装为/usr/include/sound/asound.h
,但为了避免依赖正确安装的内核头文件,alsa-lib在alsa-lib/include/sound/asound.h
中有自己的此文件副本。
应用程序不应该直接访问此结构的成员,因此alsa-lib从其官方标题中不包含asound.h
(甚至不安装它;它&#39 ;仅在编译alsa-lib时使用。
要获得实际定义,您需要#include <sound/asound.h>
。
答案 2 :(得分:0)
它在API header snd/asound.h中定义。这就是客户端代码应该#include
。