2013-06-16 6 views
4

나는 siginfo.h 라이브러리에 성가신 문제가있다. SIGSYS 신호를 처리하기위한 필드가있는 siginfo_t의 구조를 포함하는이 라이브러리 버전이 필요합니다. isntance를 들어표준 라이브러리의 헤더가 Linux에 어떻게 설치되어 있습니까?

, 내가 필요로하는 구조의 버전은 여기에서 찾을 수 있습니다 : 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 변수의 경로, C_INCLUDE_PATH, CPLUS_INCLUDE_PATH, OBJC_INCLUDE_PATH; 3) "/ usr/include"와 같은 시스템 경로 "-I"옵션을 사용하여 헤더 파일 검색 경로를 변경할 수 있습니다. 그리고 라이브러리 경로를 변경하려면 "-L"옵션을 사용해야 할 수도 있습니다.

+0

나는 링커가 어떻게 작동하는지 알고있다. 문제는 어떻게 이러한 라이브러리가 운영 체제에 설치되어 있습니다. –

0

siginfo_tunion {} _sifields에서 사용할 수있는 것은 사용중인 커널에 따라 다릅니다.

커널 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하지 않습니다.

정확한 소개 시점을 모르겠습니다.

관련 문제