4

我对库 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) 中又有一个完全不同的版本,而不是我需要的。

现在我有点困惑,标准库的标头实际上是如何安装的?我应该激活编译选项以获得这种结构吗?

4

2 回答 2

0

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 没有。

我不知道它是什么时候确切介绍的。

于 2013-06-19T17:20:42.213 回答
-1

头文件在 gcc 中按以下顺序搜索: 1) -I 选项标识的路径;2)环境变量中的路径,C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH;3) 系统路径,如“/usr/include”等。所以可以使用“-I”选项改变头文件搜索路径。而且,您可能需要使用“-L”选项来更改库路径。

于 2013-06-16T14:47:21.333 回答