我有一个恼人的问题,一个库siginfo.h。 我需要这个库的一个版本,它包含siginfo_t的结构和一个用于处理SIGSYS信号的字段。
对于isntance,我需要的结构版本可以在这里find: http ://code.woboq.org/userspace/glibc/sysdeps/unix/sysv/linux/x86/bits/siginfo.h.html
使用#include自动包含的版本是缺less此字段的/usr/include/bits/siginfo.h中的版本。 但是,在asm-generic中有另一个版本的库,它提供了我需要的字段。 内核包含两个名为siginfo.h的文件,但是它们不包含siginfo_t结构。 我认为这个问题可以通过更新glibc来解决,但在glibc(2.17)的最新版本中,有一个完全不同的版本,而不是我所需要的。
现在我有点困惑,标准库的头文件是如何安装的? 我应该激活编译选项有这个结构?
union {} _sifields
中的成员union {} _sifields
中的siginfo_t
取决于您正在使用的内核。
内核3.6.4 definitly定义:
/* 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不。
我不知道它是什么时候推出的。
头文件在gcc中按以下顺序搜索:1)由-I选项标识的路径; 2)环境中的路径,C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH; 3)系统路径,如“/ usr / include”等。所以你可以使用“-I”选项来改变头文件的搜索路径。 而且,您可能需要使用“-L”选项来改变库路径。