글쎄, 분명히 차이가 있지만 왜 어떤 것들은 /usr/include/sys 아래에 배치되고 다른 것들은 /usr/include/linux 아래에 동일한 헤더 파일 이름으로 배치되는지 궁금합니다. ? 이것이 POSIX vx non-POSIX와 관련이 있나요?
또한 kernel-headers 패키지를 가져와 Fedora 시스템의 헤더로 /usr/include/linux를 성공적으로 채웠습니다. /usr/include/sys 문서 아래의 헤더를 가져오는 데 사용할 수 있는 표준 패키지 이름이 있습니까? 나는 그것을 찾을 수 없었다.
답변1
/usr/include/linux
아래와 아래의 헤더는 /usr/include/asm*
Linux 커널과 함께 배포됩니다. 다른 헤더 파일( /usr/include/sys/*.h
등 /usr/include/bits/*.h
)은 C 라이브러리(GNU C 라이브러리, 모든 비임베디드 Linux 시스템에서는 glibc라고도 함). 조금glibc 매뉴얼의 설명.
및 /usr/include/linux
에는 /usr/include/asm
실행 중인 커널의 헤더가 아니라 C 라이브러리를 컴파일할 때 사용된 헤더가 포함되어야 합니다. 그렇지 않고 일부 상수나 데이터 구조가 변경되면 컴파일된 프로그램과 C 라이브러리 간에 불일치가 발생하여 충돌이 발생하거나 더 악화될 가능성이 높습니다. (헤더가 C 라이브러리와 일치하지만 C 라이브러리가 커널과 일치하지 않는 경우 실제로 일어나는 일은 커널이 안정적인 ABI를 유지하도록 설계되었으며 다른 ABI에서 호출되고 있음을 감지해야 한다는 것입니다. 그에 따라 해석하십시오. 시스템 호출 매개변수는 어쨌든 정적으로 컴파일된 프로그램에 대해 이 작업을 수행해야 합니다.)
나는 얼마 전(10년?) 이 문제에 관해 Debian과 Red Hat /usr/include/linux
사이에 열띤 논쟁이 있었던 것을 기억합니다. 양쪽 모두 분명히 자신들의 입장을 고수했습니다. (내가 이해한 바에 따르면 위에서 언급한 대로 데비안이 맞습니다.) 데비안의 현재 배포판 /usr/include/linux
과 친구들은 다음과 같습니다.linux-libc-dev
커널 소스에서 컴파일되었지만 커널과 함께 업그레이드되지 않은 패키지입니다. 커널 헤더 파일은 버전별 패키지에 위치하며 다음을 제공합니다.linux-headers-2.6
메타패키지는 특정 커널 버전용 모듈을 컴파일하는 데 필요합니다.
찾고 있는 패키지는 C 라이브러리 헤더 파일입니다. 이름이 무엇인지는 모르겠지만 을 통해 알 수 있습니다 yum provides /usr/include/sys/types.h
.