2017-11-28 4 views
0

Linux 커널 (프로세스의 가상 주소 공간, 프로세스 상태 및 이와 같은 정보)에서 메모리 정보를 사용하는 C 코드를 작성하려고합니다.Linux 헤더 포함 반환 파일이나 디렉토리가 없습니다.

이 정보를 얻으려면 아래 헤더를 포함시켜야합니다.

#include<linux/init.h> 
#include<linux/module.h> 
#include<linux/mm.h> 

실제 파일은 리눅스 폴더 아래에있는,하지만 난이 오류를 받고 있어요 왜

No such file or directory

누군가가 설명해 주실 것을 GCC를 사용하여 반환하는 파일을 컴파일 할 때! 무엇을해야합니까?

  • 이미 커널 컴파일 및 설치 한 사용 가능한 모든 업데이트 (커널 버전 3.16.0)
+0

'apt get'을 사용하여 설치하지 않으면'linux-headers-3.16.0'을 설치 했습니까? 또 다른 옵션은 헤더 파일 경로를 찾고'-I' 플래그를 사용하여'gcc '에서 컴파일 할 때 상대 경로를 포함하는 것입니다. – LethalProgrammer

+0

* 실제 파일은 linux 폴더 아래에 존재합니다. * 컴파일러는'/ usr/include/linux'를보고 있지만 찾을 수는 없습니다. 어쩌면 다른 위치에 있을까요? 컴파일러가 어디에서 볼 수 있도록'-I [path of (parent of) linux folder] '를 추가하십시오! –

+0

'gcc -I'를 사용하여 컴파일 된 헤더를 설치했습니다. 이제 치명적인 오류가 발생합니다 : uapi/linux/stddef.h : 파일이나 디렉토리가 없습니다. #include '내 코드에 그런 헤더를 포함시키지 않고있다. –

답변

0

질문에 대한 답변.

apt-get

참고를 사용하여 누락 된 패키지 kernel-devel를 설치 나는 apt 당신이 예를 yum 위해 해당 시스템에서 지원되는 것을 사용할 수있는 패키지를 설치 언급했습니다.

kernel-devel을 설치할 수없는 경우 일반 Linux 헤더를 설치하는이 방법을 사용해보십시오.

sudo apt-get update && sudo apt-get install linux-headers-`uname -r` 

는 init.h 또는 module.h에이

locate 유틸리티

를 사용하는 경우 다음 당신은 확인하실 수 있습니다 다음 -I 플래그를 사용하여 컴파일에 경로를 추가합니다.

gcc -g your_file.c -I/usr/path/of/the/kernel/header/include 
+0

OP가 데비안 기반 배포판을 사용하고 있다는 표시가 없다. 그들은 그렇지만, 이것은 일반적으로 배포판에 독립적 인 "귀하의 질문에 대한 대답"은 아닙니다. – tripleee

+0

OK, 설치 패키지 소프트웨어 yum 또는 sudo apt 또는 사용 가능한 패키지를 추가합니다. – LethalProgrammer

+0

'gcc -I'를 사용하여 컴파일 된 헤더를 설치했습니다. 이제 'fatal error : uapi/linux/stddef.h :이 파일이나 디렉토리를 포함하지 않습니다.'를 포함합니다. ' 나는 내 코드에 그런 헤더를 포함하지 않는다. –

관련 문제