티스토리 뷰

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 에서 가져왔다.

에러해결! 짝짝

반응형

댓글