我对库siginfo.h有一个恼人的问题。我需要一个包含siginfo_t结构的库的版本,其中包含一个用于处理SIGSYS信号的字段。
对于isntance,可以在此处找到我需要的结构版本: 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)中,有一个完全不同的版本,而不是我需要的。
现在我有点困惑,标准库的标题是如何实际安装的? 我应该激活编译选项才能拥有这种结构吗?
答案 0 :(得分: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没有。
我不知道它何时被引入。
答案 1 :(得分:-1)
在gcc中按以下顺序搜索头文件: 1)-I选项标识的路径; 2)env变量中的路径,C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH; 3)系统路径,如“/ usr / include”等。 因此,您可以使用“-I”选项来更改头文件搜索路径。 而且,您可能需要使用“-L”选项来更改库路径。