커널을 다시 컴파일하려고 합니다(공식 Arch Linux 가이드에 따라:https://wiki.archlinux.org/title/Kernel/Traditional_compilation) 하지만 컴파일 오류가 발생할 때마다:
In file included from help.c:12:
In function ‘xrealloc’,
inlined from ‘add_cmdname’ at help.c:24:2:
subcmd-util.h:56:23: error: pointer may be used after ‘realloc’ [-Werror=use-after-free]
56 | ret = realloc(ptr, size);
| ^~~~~~~~~~~~~~~~~~
subcmd-util.h:52:21: note: call to ‘realloc’ here
52 | void *ret = realloc(ptr, size);
| ^~~~~~~~~~~~~~~~~~
subcmd-util.h:58:31: error: pointer may be used after ‘realloc’ [-Werror=use-after-free]
58 | ret = realloc(ptr, 1);
| ^~~~~~~~~~~~~~~
subcmd-util.h:52:21: note: call to ‘realloc’ here
52 | void *ret = realloc(ptr, size);
| ^~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make[4]: *** [/home/jenusi/Downloads/linux-5.15/tools/build/Makefile.build:97: /home/jenusi/Downloads/linux-5.15/tools/objtool/help.o] Error 1
make[3]: *** [Makefile:59: /home/jenusi/Downloads/linux-5.15/tools/objtool/libsubcmd-in.o] Error 2
make[2]: *** [Makefile:63: /home/jenusi/Downloads/linux-5.15/tools/objtool/libsubcmd.a] Error 2
make[1]: *** [Makefile:69: objtool] Error 2
make: *** [Makefile:1371: tools/objtool] Error 2
커널: 5.15.54, GCC: 12.1.0
답변1
첫째, 귀하의 make는 "충돌"하지 않았지만 GCC 오류로 종료되었습니다.
GCC 12.1은 코드 [품질]에 대해 보다 엄격한 새로운 검사를 가능하게 하기 때문에 특정 커널을 컴파일하는 데 더 이상 사용되지 않습니다. 이는 다양한 -Werror
옵션("경고를 오류로 처리")이 이전 버전의 컴파일러 존재하지 않는 오류에서 문제를 일으킬 수 있음을 의미합니다.
여러 가지 옵션이 있습니다:
- GCC 11.4와 같은 이전 GCC 버전을 사용하세요.
- GCC 12.1 사용: Makefile 편집 및 제거
-Werror=use-after-free
- 이러한 버그를 수정하기 위한 커널 패치(제공되거나 제공되지 않을 수 있음)를 기다리는 중
답변2
-Wno-use-after-free
makefile 라인 22에 추가합니다 tools/lib/subcmd/Makefile
.
아래와 같습니다.
CFLAGS := -ggdb3 -Wall -Wextra -std=gnu99 -fPIC -Wno-use-after-free