alsa-lib - 无法定位结构定义。低级设计模式?

时间:2015-07-21 07:39:43

标签: c linux alsa

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并对结构进行概述。

这是某种形式的低级结构定义模式吗?

3 个答案:

答案 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