include

动作标签<jsp:include  page="xxx.jsp"/>

<jsp:include page="departmentInfo.jsp"> 

<jsp:param>来传递多个参数

<jsp:param value="name" name="text"/> 

</jsp:include> 


说明标签<%@ include  file="departmentInfo.jsp.jsp"%>

HOSTCC scripts/basic/fixdep UPD scripts/kconfig/mconf-cfg HOSTCC scripts/kconfig/mconf.o In file included from /usr/include/linux/limits.h:6, from /usr/include/x86_64-linux-gnu/bits/local_lim.h:38, from /usr/include/x86_64-linux-gnu/bits/posix1_lim.h:161, from /usr/include/limits.h:195, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:203, from /usr/lib/gcc/x86_64-linux-gnu/11/include/syslimits.h:7, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:34, from scripts/kconfig/mconf.c:14: /usr/include/linux/types.h:13:9: error: unknown type name ‘u32’ 13 | typedef u32 __kernel_dev_t; | ^~~ /usr/include/linux/types.h:20:9: error: unknown type name ‘u32’ 20 | typedef u32 nlink_t; | ^~~ /usr/include/linux/types.h:93:9: error: unknown type name ‘u8’ 93 | typedef u8 u_int8_t; | ^~ /usr/include/linux/types.h:94:9: error: unknown type name ‘s8’ 94 | typedef s8 int8_t; | ^~ /usr/include/linux/types.h:95:9: error: unknown type name ‘u16’ 95 | typedef u16 u_int16_t; | ^~~ /usr/include/linux/types.h:96:9: error: unknown type name ‘s16’ 96 | typedef s16 int16_t; | ^~~ /usr/include/linux/types.h:97:9: error: unknown type name ‘u32’ 97 | typedef u32 u_int32_t; | ^~~ /usr/include/linux/types.h:98:9: error: unknown type name ‘s32’ 98 | typedef s32 int32_t; | ^~~ /usr/include/linux/types.h:102:9: error: unknown type name ‘u8’ 102 | typedef u8 uint8_t; | ^~ /usr/include/linux/types.h:103:9: error: unknown type name ‘u16’ 103 | typedef u16 uint16_t; | ^~~ /usr/include/linux/types.h:104:9: error: unknown type name ‘u32’ 104 | typedef u32 uint32_t; | ^~~ /usr/include/linux/types.h:107:9: error: unknown type name ‘u64’ 107 | typedef u64 uint64_t; | ^~~ /usr/include/linux/types.h:108:9: error: unknown type name ‘u64’ 108 | typedef u64 u_int64_t; | ^~~ /usr/include/linux/types.h:109:9: error: unknown type name ‘s64’ 109 | typedef s64 int64_t; | ^~~ /usr/include/linux/types.h:125:9: error: unknown type name ‘u64’ 125 | typedef u64 sector_t; | ^~~ /usr/include/linux/types.h:126:9: error: unknown type name ‘u64’ 126 | typedef u64 blkcnt_t; | ^~~ /usr/include/linux/types.h:145:9: error: unknown type name ‘u32’ 145 | typedef u32 dma_addr_t; | ^~~ /usr/include/linux/types.h:155:9: error: unknown type name ‘u32’ 155 | typedef u32 phys_addr_t; | ^~~ In file included from /usr/include/linux/limits.h:7, from /usr/include/x86_64-linux-gnu/bits/local_lim.h:38, from /usr/include/x86_64-linux-gnu/bits/posix1_lim.h:161, from /usr/include/limits.h:195, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:203, from /usr/lib/gcc/x86_64-linux-gnu/11/include/syslimits.h:7, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:34, from scripts/kconfig/mconf.c:14: /usr/include/x86_64-linux-gnu/bits/xopen_lim.h:99:6: error: missing binary operator before token "(" 99 | # if INT_MAX == 32767 | ^~~~~~~ /usr/include/x86_64-linux-gnu/bits/xopen_lim.h:102:7: error: missing binary operator before token "(" 102 | # if INT_MAX == 2147483647 | ^~~~~~~ /usr/include/x86_64-linux-gnu/bits/xopen_lim.h:126:6: error: missing binary operator before token "(" 126 | # if LONG_MAX == 2147483647 | ^~~~~~~~ In file included from /usr/include/stdlib.h:395, from scripts/kconfig/mconf.c:16: /usr/include/x86_64-linux-gnu/sys/types.h:42:18: error: conflicting types for ‘loff_t’; have ‘__loff_t’ {aka ‘long int’} 42 | typedef __loff_t loff_t; | ^~~~~~ In file included from /usr/include/linux/limits.h:6, from /usr/include/x86_64-linux-gnu/bits/local_lim.h:38, from /usr/include/x86_64-linux-gnu/bits/posix1_lim.h:161, from /usr/include/limits.h:195, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:203, from /usr/lib/gcc/x86_64-linux-gnu/11/include/syslimits.h:7, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:34, from scripts/kconfig/mconf.c:14: /usr/include/linux/types.h:46:33: note: previous declaration of ‘loff_t’ with type ‘loff_t’ {aka ‘long long int’} 46 | typedef __kernel_loff_t loff_t; | ^~~~~~ In file included from /usr/include/stdlib.h:395, from scripts/kconfig/mconf.c:16: /usr/include/x86_64-linux-gnu/sys/types.h:59:17: error: conflicting types for ‘dev_t’; have ‘__dev_t’ {aka ‘long unsigned int’} 59 | typedef __dev_t dev_t; | ^~~~~ In file included from /usr/include/linux/limits.h:6, from /usr/include/x86_64-linux-gnu/bits/local_lim.h:38, from /usr/include/x86_64-linux-gnu/bits/posix1_lim.h:161, from /usr/include/limits.h:195, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:203, from /usr/lib/gcc/x86_64-linux-gnu/11/include/syslimits.h:7, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:34, from scripts/kconfig/mconf.c:14: /usr/include/linux/types.h:16:33: note: previous declaration of ‘dev_t’ with type ‘dev_t’ {aka ‘int’} 16 | typedef __kernel_dev_t dev_t; | ^~~~~ In file included from /usr/include/stdlib.h:395, from scripts/kconfig/mconf.c:16: /usr/include/x86_64-linux-gnu/sys/types.h:74:19: error: conflicting types for ‘nlink_t’; have ‘__nlink_t’ {aka ‘long unsigned int’} 74 | typedef __nlink_t nlink_t; | ^~~~~~~ In file included from /usr/include/linux/limits.h:6, from /usr/include/x86_64-linux-gnu/bits/local_lim.h:38, from /usr/include/x86_64-linux-gnu/bits/posix1_lim.h:161, from /usr/include/limits.h:195, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:203, from /usr/lib/gcc/x86_64-linux-gnu/11/include/syslimits.h:7, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:34, from scripts/kconfig/mconf.c:14: /usr/include/linux/types.h:20:33: note: previous declaration of ‘nlink_t’ with type ‘nlink_t’ {aka ‘int’} 20 | typedef u32 nlink_t; | ^~~~~~~ In file included from /usr/include/x86_64-linux-gnu/sys/types.h:130, from /usr/include/stdlib.h:395, from scripts/kconfig/mconf.c:16: /usr/include/x86_64-linux-gnu/bits/types/timer_t.h:7:19: error: conflicting types for ‘timer_t’; have ‘__timer_t’ {aka ‘void *’} 7 | typedef __timer_t timer_t; | ^~~~~~~ In file included from /usr/include/linux/limits.h:6, from /usr/include/x86_64-linux-gnu/bits/local_lim.h:38, from /usr/include/x86_64-linux-gnu/bits/posix1_lim.h:161, from /usr/include/limits.h:195, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:203, from /usr/lib/gcc/x86_64-linux-gnu/11/include/syslimits.h:7, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:34, from scripts/kconfig/mconf.c:14: /usr/include/linux/types.h:26:33: note: previous declaration of ‘timer_t’ with type ‘timer_t’ {aka ‘int’} 26 | typedef __kernel_timer_t timer_t; | ^~~~~~~ In file included from /usr/include/x86_64-linux-gnu/sys/types.h:155, from /usr/include/stdlib.h:395, from scripts/kconfig/mconf.c:16: /usr/include/x86_64-linux-gnu/bits/stdint-intn.h:24:18: error: conflicting types for ‘int8_t’; have ‘__int8_t’ {aka ‘signed char’} 24 | typedef __int8_t int8_t; | ^~~~~~ In file included from /usr/include/linux/limits.h:6, from /usr/include/x86_64-linux-gnu/bits/local_lim.h:38, from /usr/include/x86_64-linux-gnu/bits/posix1_lim.h:161, from /usr/include/limits.h:195, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:203, from /usr/lib/gcc/x86_64-linux-gnu/11/include/syslimits.h:7, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:34, from scripts/kconfig/mconf.c:14: /usr/include/linux/types.h:94:33: note: previous declaration of ‘int8_t’ with type ‘int8_t’ {aka ‘int’} 94 | typedef s8 int8_t; | ^~~~~~ In file included from /usr/include/x86_64-linux-gnu/sys/types.h:155, from /usr/include/stdlib.h:395, from scripts/kconfig/mconf.c:16: /usr/include/x86_64-linux-gnu/bits/stdint-intn.h:25:19: error: conflicting types for ‘int16_t’; have ‘__int16_t’ {aka ‘short int’} 25 | typedef __int16_t int16_t; | ^~~~~~~ In file included from /usr/include/linux/limits.h:6, from /usr/include/x86_64-linux-gnu/bits/local_lim.h:38, from /usr/include/x86_64-linux-gnu/bits/posix1_lim.h:161, from /usr/include/limits.h:195, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:203, from /usr/lib/gcc/x86_64-linux-gnu/11/include/syslimits.h:7, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:34, from scripts/kconfig/mconf.c:14: /usr/include/linux/types.h:96:33: note: previous declaration of ‘int16_t’ with type ‘int16_t’ {aka ‘int’} 96 | typedef s16 int16_t; | ^~~~~~~ In file included from /usr/include/x86_64-linux-gnu/sys/types.h:155, from /usr/include/stdlib.h:395, from scripts/kconfig/mconf.c:16: /usr/include/x86_64-linux-gnu/bits/stdint-intn.h:27:19: error: conflicting types for ‘int64_t’; have ‘__int64_t’ {aka ‘long int’} 27 | typedef __int64_t int64_t; | ^~~~~~~ In file included from /usr/include/linux/limits.h:6, from /usr/include/x86_64-linux-gnu/bits/local_lim.h:38, from /usr/include/x86_64-linux-gnu/bits/posix1_lim.h:161, from /usr/include/limits.h:195, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:203, from /usr/lib/gcc/x86_64-linux-gnu/11/include/syslimits.h:7, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:34, from scripts/kconfig/mconf.c:14: /usr/include/linux/types.h:109:33: note: previous declaration of ‘int64_t’ with type ‘int64_t’ {aka ‘int’} 109 | typedef s64 int64_t; | ^~~~~~~ In file included from /usr/include/stdlib.h:395, from scripts/kconfig/mconf.c:16: /usr/include/x86_64-linux-gnu/sys/types.h:158:19: error: conflicting types for ‘u_int8_t’; have ‘__uint8_t’ {aka ‘unsigned char’} 158 | typedef __uint8_t u_int8_t; | ^~~~~~~~ In file included from /usr/include/linux/limits.h:6, from /usr/include/x86_64-linux-gnu/bits/local_lim.h:38, from /usr/include/x86_64-linux-gnu/bits/posix1_lim.h:161, from /usr/include/limits.h:195, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:203, from /usr/lib/gcc/x86_64-linux-gnu/11/include/syslimits.h:7, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:34, from scripts/kconfig/mconf.c:14: /usr/include/linux/types.h:93:33: note: previous declaration of ‘u_int8_t’ with type ‘u_int8_t’ {aka ‘int’} 93 | typedef u8 u_int8_t; | ^~~~~~~~ In file included from /usr/include/stdlib.h:395, from scripts/kconfig/mconf.c:16: /usr/include/x86_64-linux-gnu/sys/types.h:159:20: error: conflicting types for ‘u_int16_t’; have ‘__uint16_t’ {aka ‘short unsigned int’} 159 | typedef __uint16_t u_int16_t; | ^~~~~~~~~ In file included from /usr/include/linux/limits.h:6, from /usr/include/x86_64-linux-gnu/bits/local_lim.h:38, from /usr/include/x86_64-linux-gnu/bits/posix1_lim.h:161, from /usr/include/limits.h:195, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:203, from /usr/lib/gcc/x86_64-linux-gnu/11/include/syslimits.h:7, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:34, from scripts/kconfig/mconf.c:14: /usr/include/linux/types.h:95:33: note: previous declaration of ‘u_int16_t’ with type ‘u_int16_t’ {aka ‘int’} 95 | typedef u16 u_int16_t; | ^~~~~~~~~ In file included from /usr/include/stdlib.h:395, from scripts/kconfig/mconf.c:16: /usr/include/x86_64-linux-gnu/sys/types.h:160:20: error: conflicting types for ‘u_int32_t’; have ‘__uint32_t’ {aka ‘unsigned int’} 160 | typedef __uint32_t u_int32_t; | ^~~~~~~~~ In file included from /usr/include/linux/limits.h:6, from /usr/include/x86_64-linux-gnu/bits/local_lim.h:38, from /usr/include/x86_64-linux-gnu/bits/posix1_lim.h:161, from /usr/include/limits.h:195, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:203, from /usr/lib/gcc/x86_64-linux-gnu/11/include/syslimits.h:7, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:34, from scripts/kconfig/mconf.c:14: /usr/include/linux/types.h:97:33: note: previous declaration of ‘u_int32_t’ with type ‘u_int32_t’ {aka ‘int’} 97 | typedef u32 u_int32_t; | ^~~~~~~~~ In file included from /usr/include/stdlib.h:395, from scripts/kconfig/mconf.c:16: /usr/include/x86_64-linux-gnu/sys/types.h:161:20: error: conflicting types for ‘u_int64_t’; have ‘__uint64_t’ {aka ‘long unsigned int’} 161 | typedef __uint64_t u_int64_t; | ^~~~~~~~~ In file included from /usr/include/linux/limits.h:6, from /usr/include/x86_64-linux-gnu/bits/local_lim.h:38, from /usr/include/x86_64-linux-gnu/bits/posix1_lim.h:161, from /usr/include/limits.h:195, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:203, from /usr/lib/gcc/x86_64-linux-gnu/11/include/syslimits.h:7, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:34, from scripts/kconfig/mconf.c:14: /usr/include/linux/types.h:108:33: note: previous declaration of ‘u_int64_t’ with type ‘u_int64_t’ {aka ‘int’} 108 | typedef u64 u_int64_t; | ^~~~~~~~~ In file included from /usr/include/x86_64-linux-gnu/sys/types.h:179, from /usr/include/stdlib.h:395, from scripts/kconfig/mconf.c:16: /usr/include/x86_64-linux-gnu/sys/select.h:70:5: error: conflicting types for ‘fd_set’; have ‘struct <anonymous>’ 70 | } fd_set; | ^~~~~~ In file included from /usr/include/linux/limits.h:6, from /usr/include/x86_64-linux-gnu/bits/local_lim.h:38, from /usr/include/x86_64-linux-gnu/bits/posix1_lim.h:161, from /usr/include/limits.h:195, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:203, from /usr/lib/gcc/x86_64-linux-gnu/11/include/syslimits.h:7, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:34, from scripts/kconfig/mconf.c:14: /usr/include/linux/types.h:15:33: note: previous declaration of ‘fd_set’ with type ‘fd_set’ 15 | typedef __kernel_fd_set fd_set; | ^~~~~~ In file included from /usr/include/stdlib.h:395, from scripts/kconfig/mconf.c:16: /usr/include/x86_64-linux-gnu/sys/types.h:192:20: error: conflicting types for ‘blkcnt_t’; have ‘__blkcnt_t’ {aka ‘long int’} 192 | typedef __blkcnt_t blkcnt_t; /* Type to count number of disk blocks. */ | ^~~~~~~~ In file included from /usr/include/linux/limits.h:6, from /usr/include/x86_64-linux-gnu/bits/local_lim.h:38, from /usr/include/x86_64-linux-gnu/bits/posix1_lim.h:161, from /usr/include/limits.h:195, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:203, from /usr/lib/gcc/x86_64-linux-gnu/11/include/syslimits.h:7, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:34, from scripts/kconfig/mconf.c:14: /usr/include/linux/types.h:126:13: note: previous declaration of ‘blkcnt_t’ with type ‘blkcnt_t’ {aka ‘int’} 126 | typedef u64 blkcnt_t; | ^~~~~~~~ In file included from scripts/kconfig/expr.h:15, from scripts/kconfig/lkc.h:13, from scripts/kconfig/mconf.c:22: scripts/kconfig/list.h:24:8: error: redefinition of ‘struct list_head’ 24 | struct list_head { | ^~~~~~~~~ In file included from /usr/include/linux/limits.h:6, from /usr/include/x86_64-linux-gnu/bits/local_lim.h:38, from /usr/include/x86_64-linux-gnu/bits/posix1_lim.h:161, from /usr/include/limits.h:195, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:203, from /usr/lib/gcc/x86_64-linux-gnu/11/include/syslimits.h:7, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:34, from scripts/kconfig/mconf.c:14: /usr/include/linux/types.h:178:8: note: originally defined here 178 | struct list_head { | ^~~~~~~~~ In file included from /usr/include/stdint.h:37, from /usr/lib/gcc/x86_64-linux-gnu/11/include/stdint.h:9, from /usr/include/curses.h:95, from scripts/kconfig/lxdialog/dialog.h:19, from scripts/kconfig/mconf.c:23: /usr/include/x86_64-linux-gnu/bits/stdint-uintn.h:24:19: error: conflicting types for ‘uint8_t’; have ‘__uint8_t’ {aka ‘unsigned char’} 24 | typedef __uint8_t uint8_t; | ^~~~~~~ In file included from /usr/include/linux/limits.h:6, from /usr/include/x86_64-linux-gnu/bits/local_lim.h:38, from /usr/include/x86_64-linux-gnu/bits/posix1_lim.h:161, from /usr/include/limits.h:195, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:203, from /usr/lib/gcc/x86_64-linux-gnu/11/include/syslimits.h:7, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:34, from scripts/kconfig/mconf.c:14: /usr/include/linux/types.h:102:33: note: previous declaration of ‘uint8_t’ with type ‘uint8_t’ {aka ‘int’} 102 | typedef u8 uint8_t; | ^~~~~~~ In file included from /usr/include/stdint.h:37, from /usr/lib/gcc/x86_64-linux-gnu/11/include/stdint.h:9, from /usr/include/curses.h:95, from scripts/kconfig/lxdialog/dialog.h:19, from scripts/kconfig/mconf.c:23: /usr/include/x86_64-linux-gnu/bits/stdint-uintn.h:25:20: error: conflicting types for ‘uint16_t’; have ‘__uint16_t’ {aka ‘short unsigned int’} 25 | typedef __uint16_t uint16_t; | ^~~~~~~~ In file included from /usr/include/linux/limits.h:6, from /usr/include/x86_64-linux-gnu/bits/local_lim.h:38, from /usr/include/x86_64-linux-gnu/bits/posix1_lim.h:161, from /usr/include/limits.h:195, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:203, from /usr/lib/gcc/x86_64-linux-gnu/11/include/syslimits.h:7, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:34, from scripts/kconfig/mconf.c:14: /usr/include/linux/types.h:103:33: note: previous declaration of ‘uint16_t’ with type ‘uint16_t’ {aka ‘int’} 103 | typedef u16 uint16_t; | ^~~~~~~~ In file included from /usr/include/stdint.h:37, from /usr/lib/gcc/x86_64-linux-gnu/11/include/stdint.h:9, from /usr/include/curses.h:95, from scripts/kconfig/lxdialog/dialog.h:19, from scripts/kconfig/mconf.c:23: /usr/include/x86_64-linux-gnu/bits/stdint-uintn.h:26:20: error: conflicting types for ‘uint32_t’; have ‘__uint32_t’ {aka ‘unsigned int’} 26 | typedef __uint32_t uint32_t; | ^~~~~~~~ In file included from /usr/include/linux/limits.h:6, from /usr/include/x86_64-linux-gnu/bits/local_lim.h:38, from /usr/include/x86_64-linux-gnu/bits/posix1_lim.h:161, from /usr/include/limits.h:195, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:203, from /usr/lib/gcc/x86_64-linux-gnu/11/include/syslimits.h:7, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:34, from scripts/kconfig/mconf.c:14: /usr/include/linux/types.h:104:33: note: previous declaration of ‘uint32_t’ with type ‘uint32_t’ {aka ‘int’} 104 | typedef u32 uint32_t; | ^~~~~~~~ In file included from /usr/include/stdint.h:37, from /usr/lib/gcc/x86_64-linux-gnu/11/include/stdint.h:9, from /usr/include/curses.h:95, from scripts/kconfig/lxdialog/dialog.h:19, from scripts/kconfig/mconf.c:23: /usr/include/x86_64-linux-gnu/bits/stdint-uintn.h:27:20: error: conflicting types for ‘uint64_t’; have ‘__uint64_t’ {aka ‘long unsigned int’} 27 | typedef __uint64_t uint64_t; | ^~~~~~~~ In file included from /usr/include/linux/limits.h:6, from /usr/include/x86_64-linux-gnu/bits/local_lim.h:38, from /usr/include/x86_64-linux-gnu/bits/posix1_lim.h:161, from /usr/include/limits.h:195, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:203, from /usr/lib/gcc/x86_64-linux-gnu/11/include/syslimits.h:7, from /usr/lib/gcc/x86_64-linux-gnu/11/include/limits.h:34, from scripts/kconfig/mconf.c:14: /usr/include/linux/types.h:107:33: note: previous declaration of ‘uint64_t’ with type ‘uint64_t’ {aka ‘int’} 107 | typedef u64 uint64_t; | ^~~~~~~~ make[1]: *** [scripts/Makefile.host:112:scripts/kconfig/mconf.o] 错误 1 make: *** [Makefile:616:menuconfig] 错误 2
最新发布
08-10
<think>我们遇到了一个编译错误,错误信息显示在编译scripts/kconfig/mconf.c时出现了大量的类型冲突。错误主要集中在Linux内核头文件和系统标准头文件之间的类型定义冲突。 错误分析: 1. 错误信息中显示了很多类型(如u32, u8, s8等)在/usr/include/linux/types.h中定义,但在编译过程中被系统标准头文件(如/usr/include/x86_64-linux-gnu/sys/types.h)重新定义,且类型不一致。 2. 另外,还出现了结构体重定义(如struct list_head)和类型冲突(如loff_t, dev_t, nlink_t, timer_t, int8_t等)。 原因: 通常,这类错误发生在编译内核相关工具(如这里的mconf,它是内核配置工具的一部分)时,因为内核头文件和系统头文件(glibc头文件)对同一类型使用了不同的定义。内核头文件通常在内核源码树中,而系统头文件在/usr/include中。在编译用户空间工具时,应该使用系统头文件,但有时内核头文件会被错误地包含进来。 解决方案: 1. 确保在编译用户空间工具时,不要包含内核头文件(尤其是/usr/include/linux下的头文件)。这些头文件是为内核模块准备的,而不是用户空间程序。 2. 检查编译命令,确保没有通过-I选项添加了内核头文件路径。 3. 在代码中,应该包含正确的头文件。例如,用户空间程序应该包含<sys/types.h>而不是<linux/types.h>。 但是,这里的问题是mconf.c中包含了<linux/limits.h>,而该头文件又包含了<linux/types.h>,导致了冲突。我们需要修改代码,避免包含内核头文件。 具体到mconf.c,它包含了<limits.h>,而<limits.h>在系统中会包含一些标准头文件,但这里错误地包含了<linux/limits.h>。注意,标准C库的<limits.h>在/usr/include/limits.h,而内核的<linux/limits.h>在/usr/include/linux/limits.h。在用户空间程序中,应该包含标准的<limits.h>,而不是内核的。 然而,在代码中我们看到: from scripts/kconfig/mconf.c:14: #include <limits.h> 但是,在包含路径中,可能系统先找到了内核头文件目录下的limits.h。这通常是因为在编译命令中包含了-I/usr/include/linux,或者因为其他原因导致系统头文件路径顺序不正确。 如何解决? 1. 检查编译命令,确保没有将内核头文件路径(如/usr/include/linux)包含在系统头文件路径之前。通常,系统头文件路径(/usr/include)应该被优先使用。 2. 在编译内核的用户空间工具时,应该使用内核源码树中的头文件(通过设置环境变量或makefile变量),而不是系统头文件。但这里出现的问题可能是由于系统头文件被错误地覆盖了。 实际上,在编译内核工具时,应该使用内核的Makefile来设置正确的头文件路径。但是,错误信息显示包含路径中包含了/usr/include下的头文件,这可能导致问题。 一个常见的解决方法是:在编译内核的用户空间工具时,通过添加额外的编译选项来避免包含系统头文件,或者通过修改代码来避免包含冲突的头文件。 但是,由于我们无法直接修改系统头文件,我们可以尝试以下方法: 修改mconf.c的代码,避免包含可能导致冲突的头文件。但是,这需要仔细检查代码的包含关系。 另一种方法是调整编译选项,在编译mconf.o时,添加以下选项: -nostdinc -I<内核源码路径>/include -I<内核源码路径>/arch/x86/include 这样,编译器将不会搜索系统标准头文件路径,而是使用内核源码树中的头文件。但是,用户空间程序通常需要标准C库,所以这样可能会导致其他问题。 实际上,内核的用户空间工具(如kconfig)在编译时应该使用系统标准头文件,但需要避免包含内核专属头文件。因此,我们需要确保在用户空间工具中,不要包含内核头文件。 观察错误信息,我们看到mconf.c包含了<limits.h>,而系统标准<limits.h>位于/usr/include/limits.h,它应该包含标准定义。但为什么这里包含了<linux/limits.h>?可能是因为在包含路径中,/usr/include/linux目录被包含进来了,并且<linux/limits.h>被错误地找到。 在编译命令中,我们可以通过添加`-H`选项来查看头文件包含顺序,但这里我们无法直接执行。 一个可行的解决方案是:在内核源码的Makefile中,为kconfig的编译添加选项,排除对/usr/include/linux的包含,或者确保系统头文件路径正确。 但是,我们也可以尝试修改mconf.c的代码: 在mconf.c的第14行,它包含了<limits.h>,我们可以尝试将其改为包含<linux/limits.h>之前的标准头文件,但这样可能不标准。 实际上,标准做法是包含<limits.h>,但我们需要确保这个<limits.h>是系统标准的,而不是内核的。 因此,我们需要检查编译环境,确保在编译用户空间工具时,不会将内核头文件路径包含进来。 但是,从错误信息中我们看到,编译器从/usr/include/linux/limits.h中获取了limits.h,这显然是不对的。所以,我们需要在编译命令中调整头文件搜索路径,将系统标准头文件路径放在前面。 我们可以尝试在Makefile中修改编译选项,添加`-I/usr/include`,以确保系统头文件路径优先。但是,通常系统头文件路径是默认包含的,并且优先级已经很高。 另一种方法是在编译命令中删除对/usr/include/linux的包含,通过`-nostdinc`并手动指定头文件路径,但这比较复杂。 考虑到这是内核编译过程中出现的问题,我们可以尝试以下解决方案: 1. 确保系统已经安装了必要的开发包,如libncurses-dev(因为mconf使用ncurses)。 2. 清理并重新配置内核编译环境。 但是,我们也可以尝试修改内核的Makefile,具体在scripts/kconfig/Makefile中,找到编译mconf的部分,添加额外的CFLAGS。 例如,在编译mconf.o时,添加: CFLAGS_mconf.o := -I/usr/include 这样可能会确保系统头文件路径被优先使用。 但是,更常见的做法是使用系统标准的头文件,而避免使用内核头文件。因此,我们可以尝试在编译用户空间工具时,定义宏来避免包含内核头文件。 实际上,内核在编译用户空间工具时,会定义一些宏来避免内核头文件被包含。例如,定义`__KERNEL_STRICT_NAMES`,这样在包含标准头文件时,就不会包含内核头文件。 我们可以尝试在编译mconf.c时,添加`-D__KERNEL_STRICT_NAMES`,但我不确定是否有效。 或者,我们可以尝试在包含任何头文件之前,定义`_POSIX_SOURCE`或`_GNU_SOURCE`等特性测试宏,以确保系统头文件提供标准定义。 在mconf.c的开头,添加: #define _POSIX_SOURCE #define _GNU_SOURCE 但这可能不能解决所有问题。 考虑到错误的复杂性,以及这是内核编译过程中的一个常见问题,可能的原因是系统环境不兼容。例如,系统升级后头文件发生了变化。 一个更直接的解决方案是:在编译内核之前,先执行`make distclean`,然后确保没有残留的配置。或者,更新内核源码到最新版本。 但是,如果我们不能更新内核,我们可以尝试手动修复。 根据错误信息,我们看到很多类型冲突,我们可以尝试修改mconf.c,避免包含引起冲突的头文件。但是,这需要深入了解代码。 另一种方法是:修改内核的Makefile,在编译kconfig工具时,使用`-isystem`指定系统头文件路径,并确保内核头文件不被包含。 但是,这些方法都比较复杂。 这里,我提供一个临时解决方案:修改引起冲突的内核头文件(/usr/include/linux/types.h)?但这是系统文件,不建议修改。 因此,我们回到问题本身:这个错误通常发生在较新的系统上,因为内核头文件和系统头文件不兼容。我们可以尝试安装与系统匹配的内核头文件。 例如,在Ubuntu上,可以安装: sudo apt-get install linux-headers-$(uname -r) 然后,再重新编译内核。 如果问题仍然存在,我们可以尝试在内核源码的顶层Makefile中,设置: HOSTCFLAGS += -idirafter /usr/include 这样,系统头文件目录会被添加到搜索路径的最后,避免覆盖内核头文件。 但是,对于用户空间工具,我们实际上希望使用系统头文件。因此,我们可以尝试: HOSTCFLAGS += -I/usr/include 确保系统头文件路径优先。 由于错误信息中显示包含路径先包含了/usr/include/linux,说明这个路径可能被包含在编译器的搜索路径中,并且优先级高于/usr/include。我们需要调整。 我们可以通过以下命令查看编译器的默认搜索路径: gcc -v -E -xc /dev/null 然后,确保/usr/include在/usr/include/linux之前。 如果/usr/include/linux在默认搜索路径中,并且先于/usr/include,我们可以通过`-I`选项调整。 在编译mconf.o时,添加: -I/usr/include -idirafter /usr/include/linux 这样,/usr/include会被优先搜索,然后才轮到/usr/include/linux。 但是,在内核的Makefile中,我们可以这样修改: 在scripts/Makefile.host中,可以找到编译host程序的规则,添加: HOSTCFLAGS += -I/usr/include 或者,更精确地,在scripts/kconfig/Makefile中,为mconf的编译添加: HOSTCFLAGS_mconf := -I/usr/include 这样,编译mconf时,会先搜索/usr/include,然后再搜索其他路径。 但是,请注意,这可能会影响其他头文件的包含,因此需要谨慎。 鉴于以上分析,我建议尝试以下步骤: 1. 在编译内核时,使用以下命令: make menuconfig HOSTCFLAGS="-I/usr/include" 或者,在顶层Makefile中,找到HOSTCFLAGS的定义,并添加`-I/usr/include`。 2. 如果不行,可以尝试在scripts/kconfig/Makefile中,找到编译mconf的部分,添加: HOSTCFLAGS_mconf = -I/usr/include 3. 清理并重新编译: make clean make menuconfig 4. 如果以上方法都不行,可以考虑升级内核源码版本,或者使用发行版提供的内核编译配置。 由于我们无法直接修改环境,我提供一种修改Makefile的方法: 在scripts/kconfig/Makefile中,找到: hostprogs-y := conf nconf mconf kxgettext qconf gconf 然后,为mconf单独设置编译标志: HOSTCFLAGS_mconf += -I/usr/include 保存后,重新编译。 但是,请注意,这个错误可能会因为不同的系统环境而有所不同,因此需要根据实际情况调整。 由于问题复杂且环境依赖性强,以上解决方案可能需要根据实际情况调整。 如果以上方法都不能解决问题,可能需要考虑在另一个系统环境中编译,或者使用交叉编译工具。 最后,由于我们无法直接运行命令,只能提供思路。 下面,我将给出一个修改Makefile的示例: 修改文件:scripts/kconfig/Makefile 在文件中添加一行: HOSTCFLAGS_mconf = -I/usr/include 这样,编译mconf时就会将/usr/include作为头文件搜索路径的第一个,从而优先使用系统标准的头文件。 但是,请注意,这行添加的位置。通常,添加在定义hostprogs-y的后面。 示例: hostprogs-y := conf nconf mconf kxgettext qconf gconf HOSTCFLAGS_mconf = -I/usr/include 然后重新编译。 注意:在编译内核时,使用普通用户权限可能会遇到权限问题,但这里不是。 如果问题依旧,可能需要更深入地检查头文件包含顺序。 由于错误信息中还有关于list_head的重定义,这是因为内核头文件(/usr/include/linux/types.h)和内核源码中的list.h(在scripts/kconfig/list.h)都定义了struct list_head。因此,我们需要避免同时包含这两个头文件。通过优先包含系统头文件,我们期望避免包含/usr/include/linux/types.h,从而解决冲突。 希望这些方法能解决问题。 由于这是一个编译环境问题,没有通用的代码解决方案,因此我无法提供具体的代码。但是,我们可以尝试修改Makefile。 如果上述方法无效,还可以尝试在包含<limits.h>之前,定义一些宏来避免包含内核头文件,例如: #define _LINUX_LIMITS_H #include <limits.h> 这样,当<limits.h>试图包含<linux/limits.h>时,会由于宏已经定义而被跳过。但是,这可能会影响其他定义,所以不推荐。 最后,如果所有方法都无效,可以考虑升级系统或内核源码。 由于问题复杂,我无法提供完全有效的代码,但希望上述思路能帮助你解决问题。 相关问题:</think>### 编译错误分析及解决方案 您遇到的编译错误是由于系统头文件(glibc)与内核头文件类型定义冲突导致的。根本原因是编译用户空间工具(如 `mconf`)时错误地包含了内核专属头文件(如 `<linux/types.h>`),而用户空间程序应使用标准C库头文件(如 `<stdint.h>`、`<sys/types.h>`)。 #### 核心问题: 1. **类型冲突**:`u32`、`u8`、`dev_t` 等类型在内核头文件和系统头文件中有不同的定义。 2. **结构体重定义**:`struct list_head` 在内核头文件和工具代码中重复定义。 3. **路径优先级问题**:编译器优先搜索了内核头文件路径(`/usr/include/linux`),而非标准系统头文件路径(`/usr/include`)。 --- ### 解决方案 #### 方法 1:修改内核编译配置(推荐) 在内核的 `Makefile` 中添加头文件搜索路径,强制优先使用系统标准头文件。 **修改步骤:** 1. 打开内核源码中的 `scripts/kconfig/Makefile`: ```bash nano scripts/kconfig/Makefile ``` 2. 在文件末尾添加以下内容: ```makefile # 强制优先搜索系统头文件路径 HOSTCFLAGS_mconf := -I/usr/include $(HOSTCFLAGS) ``` 3. 保存文件并重新编译: ```bash make clean make menuconfig ``` #### 方法 2:临时修复编译命令 直接通过命令行传递编译选项: ```bash make menuconfig HOSTCFLAGS="-I/usr/include" ``` --- ### 解释 - **`-I/usr/include`**:确保编译器优先搜索系统标准头文件目录,避免使用内核头文件。 - **`HOSTCFLAGS`**:这是编译主机工具(如 `mconf`)时使用的变量,添加 `-I/usr/include` 可覆盖默认路径顺序。 - **清理编译缓存**:`make clean` 能清除旧的对象文件,避免残留错误。 --- ### 完整修复示例 ```makefile # 文件路径: scripts/kconfig/Makefile # 原有内容 hostprogs-y := conf nconf mconf kxgettext qconf gconf conf-objs := conf.o zconf.tab.o nconf-objs := nconf.o zconf.tab.o nconf.gui.o mconf-objs := mconf.o zconf.tab.o lxdialog/checklist.o \ lxdialog/util.o lxdialog/inputbox.o \ lxdialog/textbox.o lxdialog/yesno.o \ lxdialog/menubox.o kxgettext-objs := kxgettext.o zconf.tab.o # ==== 添加修复 ==== HOSTCFLAGS_mconf += -I/usr/include # ================= ``` --- ### 预防措施 1. **更新系统**:确保内核源码与系统头文件版本兼容。 ```bash sudo apt update && sudo apt upgrade ``` 2. **安装依赖**:确认开发工具链完整。 ```bash sudo apt install build-essential libncurses-dev flex bison libssl-dev ``` 3. **使用发行版内核配置**: ```bash cp /boot/config-$(uname -r) .config make olddefconfig ``` --- ### 错误原因总结 | 错误类型 | 冲突位置 | 解决方案 | |-------------------------|----------------------------------|-----------------------| | `u32`/`u8` 未定义 | 内核头文件 vs 系统头文件 | 优先系统头文件 | | `loff_t`/`dev_t` 冲突 | 内核定义 (`long int`) vs 系统定义 (`long long`) | 隔离内核头文件 | | `struct list_head` 重定义 | 内核头文件 vs `scripts/kconfig/list.h` | 避免包含内核头文件 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值