2013-06-16 3 views
4

У меня есть неприятная проблема с библиотекой siginfo.h. Мне нужна версия этой библиотеки, которая содержит структуру siginfo_t с полем для обработки сигналов SIGSYS.Как устанавливаются заголовки стандартной библиотеки в Linux?

Для 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) снова есть совершенно другая версия, а не то, что мне нужно.

Теперь я немного смущен, как на самом деле установлены заголовки стандартных библиотек? Должен ли я активировать параметры компиляции, чтобы иметь эту структуру?

ответ

-1

Файл заголовка выполняется в следующем порядке в gcc: 1) Путь, идентифицированный опцией -I; 2) Путь в env vars, C_INCLUDE_PATH, CPLUS_INCLUDE_PATH, OBJC_INCLUDE_PATH; 3) Системный путь, например «/ usr/include» и т. Д. Таким образом, вы можете использовать опцию «-I» для изменения пути поиска файла заголовка. И, возможно, вам потребуется использовать опцию -L для изменения пути к библиотеке.

+0

Я знаю, как работает компоновщик. Проблема в том, как эти библиотеки установлены в операционной системе. –

0

Что входит в комплект union {} _sifieldssiginfo_t зависит от того, какое ядро ​​вы используете.

Kernel 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 не делает.

Не знаю, когда это было введено точно.

Смежные вопросы