여기서 무슨 일이 일어나고 있는지 모릅니다. Linux 커널을 4.9.x에서 4.14.x로 업그레이드하려고 하는데 다음과 같은 일이 발생합니다.
In file included from arch/x86/decode.c:26:0:
arch/x86/../../elf.h:22:18: fatal error: gelf.h: No such file or directory
#include <gelf.h>
^
compilation terminated.
mv: cannot stat ‘/usr/src/linux-4.14.51/tools/objtool/arch/x86/.decode.o.tmp’: No such file or directory
make[4]: *** [/usr/src/linux-4.14.51/tools/objtool/arch/x86/decode.o] Error 1
make[3]: *** [arch/x86] Error 2
make[2]: *** [/usr/src/linux-4.14.51/tools/objtool/objtool-in.o] Error 2
make[1]: *** [objtool] Error 2
make: *** [tools/objtool] Error 2
(명백한 것 외에) 여기서 무슨 일이 일어나고 있는지 아이디어가 있나요? " gelf.h
"이(가) 이미 내 컴퓨터에 있어야 합니까? 아니면 커널 타르볼에 있나요?
나는 kernel.org에서 바닐라 4.14.51을 다운로드했습니다. 나는 14년 동안 내 자신의 (수정되지 않은) 바닐라 커널을 성공적으로 반복적으로 컴파일해 왔지만 이것은 새로운 것입니다.
내 컴퓨터는 Core2 i5(64비트) 및 Slackware 14.1이 설치된 Dell 노트북입니다. 몇 년 전에 기본 3.17.x에서 4.4.x로 업그레이드했고 최근에는 4.9.x(현재 4.9.109)로 업그레이드했습니다.
나하다libelf가 설치되었습니다:
me@mylaptop:~$ locate gelf.h
/usr/include/libelf/gelf.h
me@mylaptop:~$ ls /var/log/packages/*elf*
/var/log/packages/libelf-0.8.13-x86_64-2
부록
지난 밤에 4.14.55를 시도하는 동안 커널 빌드 스크립트가 일반 /usr/include
.
즉, 내 (실행 중인) 4.9.x 소스 트리의 해당 디렉터리는 다음을 수행합니다.아니요.o
파일 도 없습니다 .ko
. 분명히 4.9.x에서 활성화하지 않은 구성 항목이 4.14.x에서 활성화된 것 같습니다.
나는 작업 중인 4.9.x에 최대한 가깝게 4.14.x를 구성하려고 노력합니다. 몇 가지 새로운 옵션을 알고 있지만 일반적으로 중간 커널 버전 간에 구성을 동일하게 유지하려고 합니다.
linux-4.14.*/tools/objtool/arch/x86/
즉, 어떤 구성 옵션 에서 헤더 파일을 보고 싶은지 모르겠습니다 ...어떤 아이디어가 있나요?
답변1
다음 패키지를 설치해야 합니다.
libelf
gelf.h
헤더 파일과 기타 파일을 제공합니다 . 어쩌면 컴퓨터에 설치한 적이 없을 수도 있습니다.
답변2
위는 #include
검색파일입니다방금 들어왔어 /usr/include/
그리고 귀하의 파일은 다른 곳에 있습니다 /usr/include/libelf/
. 이것은 작동하지 않습니다.
제발누구나:
- 심볼릭 링크를 생성하세요(바람직함).
sudo ln -s libelf/gelf.h /usr/include/gelf.h
- 파일을 복사하세요.
sudo cp -a /usr/include/libelf/gelf.h /usr/include
- 수리에는 예를 들어
#include <libelf/gelf.h>
어쨌든 이것은 Slackware의 패키징 문제입니다. 포함 파일이 잘못 설치되었습니다.