alsa-lib - 找不到结构定义。低级设计模式?

alsa-lib - Can't locate structure definition. A low level design pattern?

this example header file 的第 63 行有一个 typedef:

typedef struct _snd_ctl_elem_info snd_ctl_elem_info_t;

代码中有多个这样的 typedef 示例。 我的目标是获得结构 _snd_ctl_elem_info 的实际定义,但我已经搜索了源代码并进行了谷歌搜索,但没有发现实际定义的痕迹。由于这次搜索失败,我开始认为我可能遗漏了一些概念,这可能与内核和向后兼容性有关?

我这样做的动机是能够通过 gdb 单步执行 alsa 并大致了解结构。

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

听起来像是从 typedef 重命名的:

#define _snd_ctl_elem_info sndrv_ctl_elem_info

所以您正在寻找 sndrv_ctl_elem_info,这样更容易找到。

它在第 809 行 asound.h 中定义。

It's pretty massive这里就不贴了

API header snd/asound.h中定义。这就是客户端代码应该 #include.

alsa-lib 也使用这个结构来与内核通信,所以它只是重用了内核的定义。

内核头文件将安装为 /usr/include/sound/asound.h,但为了避免依赖正确安装的内核头文件,alsa-lib 在 alsa-lib/include/sound/asound.h 中有自己的此文件副本。

应用程序不应该直接访问这个结构的成员,所以 alsa-lib 从它的官方头文件中包含 asound.h(甚至不安装它;仅在编译 alsa-lib 时使用。

要获得实际定义,您需要 #include <sound/asound.h>