如何在Linux中安装标准库的标头?

时间:2013-06-16 12:02:35

标签: c linux kernel glibc libc

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

现在我有点困惑,标准库的标题是如何实际安装的? 我应该激活编译选项才能拥有这种结构吗?

2 个答案:

答案 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”选项来更改库路径。