이를 위해 Linux 커널 소스 파일(/net/rds/recv.c) 중 하나를 컴파일하고 다음과 같이 gcc를 호출하고 싶습니다.
gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)
cc1 -E -quiet -nostdinc -v -imultiarch x86_64-linux-gnu
-iprefix ../lib/gcc/x86_64-linux-gnu/5/
-D __attribute__(x)=
-D __restrict= -D __extension__=
-D __asm__= -D __asm__(x)=
-D __const= -D __inline__=
-D __inline= -D __volatile__=
-D __builtin_va_list=int
-D __KERNEL__ -isystem /lib/modules/4.7.0-rc1+/build/
-isystem /home/username/Desktop/linux/include/
-isystem /home/username/Desktop/linux/usr/include/
-isystem /home/username/workspace/Repositories/4.7.0-rc1+-
headers/linux/arch/x86/include/
-isystem /home/username/workspace/Repositories/4.7.0-rc1+-
headers/linux/arch/x86/include/uapi/
-isystem /home/username/workspace/Repositories/4.7.0-rc1+-
headers/linux/arch/x86/include/generated/
-isystem /home/username/workspace/Repositories/4.7.0-rc1+-
headers/linux/arch/x86/include/generated/uapi/
-isystem /usr/lib/gcc/x86_64-linux-gnu/5/include/
-isystem /usr/include/
home/myfolder/linux/net/rds/recv.c -mtune=generic -march=x86-64 -std=c99 -
fstack-protector-strong -Wformat -Wformat-security
그러나 gcc는 오류를 반환합니다.
/home/username/linux/include/linux/jiffies.h:40:3: error: #error Invalid
value of HZ.
# error Invalid value of HZ.
/home/username/linux/include/linux/jiffies.h:257:31: error: division by zero
in #if
#if !((((NSEC_PER_SEC << 2) / TICK_NSEC) << (SEC_JIFFIE_SC - 2)) &
0x80000000)
^
/home/username/linux/include/linux/jiffies.h:293:42: error: division by zero
in #if
#if HZ <= MSEC_PER_SEC && !(MSEC_PER_SEC % HZ)
^
/home/username/linux/include/linux/jiffies.h:366:20: error: division by
zero in #if
#if !(USEC_PER_SEC % HZ)
/home/username/linux/include/linux/mm_types.h:163:45: error: missing binary
operator before token "("
#if defined(CONFIG_TRANSPARENT_HUGEPAGE) && USE_SPLIT_PMD_PTLOCKS
. . .
이 오류를 해결하려면 어떻게 해야 합니까? 도움을 주셔서 감사합니다.
답변1
시도해 보세요
make net/rds/recv.o
그러나 파일을 컴파일하려면 구성된 커널이 필요하다는 점을 알아야 합니다. 커널 구성은 사용할 아키텍처, 포함할 주요 기능(예: 멀티 코어/멀티 프로세서) 등을 설정합니다. 많은 커널 헤더에는 공통 기능에 대한 올바른 래퍼를 생성하기 위해 이러한 정보가 필요합니다.
참고: 이 make
명령은 (상세 모드에 있는 경우 V=1
) 파일을 컴파일하는 데 필요한 매개변수(예: 포함할 디렉터리)를 제공합니다.