我有一个库 siginfo.h 的烦人问题。我需要这个库的一个版本,它包含 siginfo_t 的结构和一个用于处理 SIGSYS 信号的字段。
例如,我需要的结构版本可以在这里找到:
http://code.woboq.org/userspace/glibc/sysdeps/unix/sysv/linux/x86/bits/siginfo.h.html
使用 #include 自动包含的版本是
/usr/include/bits/siginfo.h 缺少此字段。但是,在 asm-generic 中有同一个库的另一个版本,它提供了我需要的字段。内核包含两个名为 siginfo.h 的文件,但它们不包含结构 siginfo_t。我认为这个问题可以通过更新 glibc 来解决,但在最新版本的 glibc (2.17) 中又出现了一个完全不同的版本,而不是我需要的。
现在我有点困惑,标准库的头文件实际上是如何安装的?
我应该激活编译选项以获得这种结构吗?
最佳答案
union {} _sifields
的成员 siginfo_t
中可用的内容取决于您使用的内核。
内核 3.6.4 明确定义:
/* SIGSYS */
struct {
void __user *_call_addr; /* calling user insn */
int _syscall; /* triggering system call number */
unsigned int _arch; /* AUDIT_ARCH_* of syscall */
} _sigsys;
内核 2.6.32 没有。
我不知道它是什么时候引入的。
关于c - Linux 中标准库的头文件是如何安装的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17133116/