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>
。
在 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>
。