我有一个库 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/

10-10 20:00