티스토리 뷰
Ubuntu에서 Kernel Compile을 진행하던 중
$ make -j3 명령어 실행 중에 다음과 같은 에러가 발생했다.
/* 에러 원문 */
arch/x86/kernel/smpboot.c: In function ‘announce_cpu’:
arch/x86/kernel/smpboot.c:848:11: error: implicit declaration of function ‘num_digits’ [-Werror=implicit-function-declaration]
width = num_digits(num_possible_cpus()) + 1; /* + '#' sign */
CC [M] arch/x86/kvm/../../../virt/kvm/eventfd.o
cc1: some warnings being treated as errors
scripts/Makefile.build:303: recipe for target 'arch/x86/kernel/smpboot.o' failed
make[2]: *** [arch/x86/kernel/smpboot.o] Error 1
scripts/Makefile.build:544: recipe for target 'arch/x86/kernel' failed
make[1]: *** [arch/x86/kernel] Error 2
빨간 글씨로 error라고 써있는 부분을 보면 num_digits 함수가 제대로 선언이 되어있지 않다고 써있다.
주로 .c 파일에서 어떤 함수를 사용할 때 그 함수가 정의되어 있는 .h 파일을 include하지 않은 경우에 발생한다.
해결 방법은 해당 함수가 들어있는 헤더 파일을 소스코드에 추가하거나, 소스코드에 직접 해당 함수를 구현해주면 된다.
나의 경우는 arch/x86/kernel/smpboot.c 파일에서 num_digits 함수 사용 시에 이 문제가 발생하는 것인데, 이 함수가 어떤 헤더파일에 정의 되어있는지 알 수가 없어서 smpboot.c 파일에 num_digits 함수를 직접 정의해주었다.
int num_digits(int val)
{
int m = 10;
int d = 1;
if (val < 0) {
d++;
val = -val;
}
while (val >= m) {
m *= 10;
d++;
}
return d;
}
소스 코드는 tomoyo.osdn.jp/cgi-bin/lxr/source/arch/x86/lib/misc.c?a=ppc#L7 에서 가져왔다.
에러해결! 짝짝