【问题标题】:How the headers of the standard library are installed in Linux?标准库的头文件如何在 Linux 中安装?
【发布时间】:2013-06-12 13:21:39
【问题描述】:

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

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

【问题讨论】:

    标签: c linux kernel glibc libc


    【解决方案1】:

    siginfo_t 的成员 union {} _sifields 中可用的内容取决于您使用的内核。

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

    不知道具体是什么时候介绍的。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我知道链接器是如何工作的。问题是这些库是如何安装在操作系统中的。
      猜你喜欢
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 2019-07-23
      • 2017-10-18
      • 2020-11-28
      • 1970-01-01
      • 2021-10-07
      • 2018-07-01
      相关资源
      最近更新 更多