![대체 GCC 버전으로 커널을 컴파일하면 어떤 결과가 발생할 수 있습니까? [폐쇄]](https://linux55.com/image/97605/%EB%8C%80%EC%B2%B4%20GCC%20%EB%B2%84%EC%A0%84%EC%9C%BC%EB%A1%9C%20%EC%BB%A4%EB%84%90%EC%9D%84%20%EC%BB%B4%ED%8C%8C%EC%9D%BC%ED%95%98%EB%A9%B4%20%EC%96%B4%EB%96%A4%20%EA%B2%B0%EA%B3%BC%EA%B0%80%20%EB%B0%9C%EC%83%9D%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F%20%5B%ED%8F%90%EC%87%84%5D.png)
관련된:
커널을 컴파일할 수 없습니다: 오류, 커널은 PIC 모드를 지원하지 않습니다.
나는 또한 패치를 적용하는 대신 이 문제에 직면했습니다.
다른 gcc 버전으로 대안을 구성하고 v4에서 v5로 점프했으며 지금 컴파일 중입니다.
$ update-alternatives --config gcc
There are 3 choices for the alternative gcc (providing /usr/bin/gcc).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/bin/gcc-6 30 auto mode
1 /usr/bin/gcc-4.8 10 manual mode
* 2 /usr/bin/gcc-5 20 manual mode
3 /usr/bin/gcc-6 30 manual mode
어떤 문제가 발생할 수 있으며, 커널을 컴파일할 GCC 버전을 선택하는 모범 사례가 있습니까?
시스템은 Debian Stretch입니다.
답변1
~에 따르면커널 문서, 3.2부터 시작하는 모든 버전의 GCC를 사용할 수 있어야 합니다. 그러나 실제로는 이전 버전의 GCC가 커널 빌드에서 많이 테스트되지 않는 경향이 있으므로 최신 버전의 GCC를 사용하는 것이 더 좋습니다(그러나 너무 새로운 것은 아니지만 GCC 6에 문제가 있습니다).
Debian에서는 다음을 통해 적절한 GCC 버전을 찾을 수 있습니다.커널 소스 패키지종속성 또는 커널 헤더 패키지의 종속성을 빌드합니다. 그러므로,linux-headers-4.7.0-1-amd64
에 의존한다linux-compiler-gcc-5-x86
때에 따라 다르지gcc-5
.
CC
값을 가져와서 /usr/src/linux-headers-$(uname -r)/.kernelvariables
( 필요한 경우 설치 후) 올바른 값을 자동으로 검색할 수 있습니다 . linux-headers-$(uname -r)
예를 들어, 내 시스템은 현재
override ARCH = x86
override KERNELRELEASE = 4.7.0-1-amd64
CCACHE = ccache
CC = $(if $(DEBIAN_KERNEL_USE_CCACHE),$(CCACHE)) $(CROSS_COMPILE)gcc-5
ifneq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH))
override CROSS_COMPILE = $(DEB_HOST_GNU_TYPE)-
endif
CC
기본 GCC가 무엇이든(저는 GCC 6을 기본값으로 사용합니다) 이를 사용하면 작동하는 커널(또는 실행 중인 커널의 모듈)이 생성됩니다.