Linux 커널 버전 4.14.51을 컴파일하는 중 오류가 발생했습니다.

Linux 커널 버전 4.14.51을 컴파일하는 중 오류가 발생했습니다.

여기서 무슨 일이 일어나고 있는지 모릅니다. 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의 패키징 문제입니다. 포함 파일이 잘못 설치되었습니다.

관련 정보