[英]How the headers of the standard library are installed in Linux?
我對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)中,有一個完全不同的版本,而不是我需要的。
現在我有點困惑,標准庫的標題實際上是如何安裝的? 我應該激活編譯選項以獲得此結構嗎?
union {} _sifields
的成員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沒有。
我不知道它何時被引入。
頭文件在gcc中按以下順序搜索:1)-I選項標識的路徑; 2)env變量中的路徑,C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH; 3)系統路徑,如“/ usr / include”等。因此,您可以使用“-I”選項來更改頭文件搜索路徑。 而且,您可能需要使用“-L”選項來更改庫路徑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.