Linux下include/lib/bin等搜索路径的配置

本文介绍如何通过修改~/.bashrc文件来配置Linux系统的环境变量,包括动态链接库(.so)、静态库(.a)、可执行文件(bin)及编译器的头文件(include)等的搜索路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很多时候,我们的.h/.so/.a/bin文件都不在Linux发行版所指定的默认路径下,这时可以通过~/.bashrc来增加搜索路径。
 #增加.so搜索路径
 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/liheyuan/soft/lib
    
  #增加.a搜索路径
 LIBRARY_PATH=$LIBRARY_PATH:/home/liheyuan/soft/lib
    
  #增加bin搜索路径
  export PATH=$PATH:/home/liheyuan/soft/bin
    
  #增加GCC的include文件搜索路径
  export C_INCLUDE_PATH=$C_INCLUDE_PATH:/home/liheyuan/soft/include
    
  #增加G++的include文件搜索路径

  export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/home/liheyuan/soft/inc

(http://www.coder4.com/archives/2100)

ziheng@ziheng-virtual-machine:/usr/src/linux-6.6.1$ sudo make menuconfig HOSTCC scripts/basic/fixdep 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 ’ 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[2]: *** [scripts/Makefile.host:131:scripts/kconfig/mconf.o] 错误 1 make[1]: *** [/usr/src/linux-6.6.1/Makefile:697:menuconfig] 错误 2 make: *** [Makefile:234:__sub-make] 错误 2
最新发布
08-09
<think>我们分析错误信息:在编译内核时,`make menuconfig` 过程中出现了大量类型冲突错误。 错误主要集中在 `/usr/include/linux/types.h` 系统头文件中的类型定义冲突。 根本原因:内核头文件(位于 `/usr/include/linux/`)被包含在用户空间程序的编译中,而内核头文件中的类型定义(如 `u32`)与标准C库头文件中的定义冲突。 具体来说,在编译内核配置工具 `mconf`(这是一个用户空间程序)时,错误地包含了内核头文件。这是因为在编译过程中,编译器搜索路径可能包含了 `/usr/include/linux`,而该路径下的头文件是供内核模块开发使用的,不应该用于用户空间程序。 解决方案:确保在编译用户空间程序时,不包含内核头文件。在编译内核配置工具时,应该使用系统标准头文件。 步骤: 1. 检查环境变量:确保没有设置 `C_INCLUDE_PATH` 或 `CPATH` 指向内核头文件路径。 2. 清理并重新配置:尝试清理编译环境,然后重新开始配置。 3. 检查内核源码树中的头文件:确保没有将内核头文件安装到系统头文件目录(/usr/include)中。 具体操作: 步骤1:清除可能的环境变量 ```bash unset C_INCLUDE_PATH unset CPATH ``` 步骤2:清理编译环境 ```bash make distclean ``` 步骤3:确保没有将内核头文件安装到系统路径 如果之前执行过 `make headers_install`,可能会将内核头文件安装到 `/usr/include`,这会导致冲突。需要恢复系统头文件。 步骤4:重新尝试配置 ```bash make menuconfig ``` 如果问题仍然存在,可以尝试在编译时指定只使用系统头文件路径,避免包含内核头文件路径。但通常这不是必须的,因为内核配置工具应该只使用系统头文件。 另外,注意错误信息中提到的头文件包含顺序: - 错误开始于 `#include <linux/limits.h>`,而该头文件又包含了其他头文件。 在Linux系统中,`/usr/include/linux/` 下的头文件是内核头文件,而用户空间程序应该使用 `/usr/include/` 下的标准头文件。但是,标准C库的头文件(如 `limits.h`)有时会包含内核头文件(通过 `#include <linux/limits.h>`),这通常是通过符号链接实现的。但在编译用户空间程序时,`linux/limits.h` 应该是由系统提供的用户空间兼容版本(即通过 `linux-libc-dev` 包安装的)。 因此,另一个可能的原因是 `linux-libc-dev` 包没有安装或损坏。 对于Debian/Ubuntu系统,可以重新安装 `linux-libc-dev`: ```bash sudo apt-get install --reinstall linux-libc-dev ``` 对于其他发行版,安装相应的包(如 `kernel-headers` 或 `linux-headers`)但注意不要与内核源码树中的头文件混淆。 总结:这个错误通常是由于系统头文件内核头文件之间的冲突引起的。解决方法是确保系统头文件完整且正确,并且编译环境没有错误地包含内核源码树中的头文件。 注意:在编译内核配置工具时,应该使用主机系统(host system)的标准头文件,而不是目标内核的头文件。 如果以上方法无效,可以尝试手动指定头文件路径,但一般不推荐。 根据以上分析,我们给出解决方案。</think>您的错误是由于**内核头文件与系统头文件冲突**导致的。当编译内核配置工具时,系统错误地包含了内核专用的头文件(位于`/usr/include/linux`),这些头文件与标准C库头文件存在类型定义冲突。以下是完整解决方案: ### 根本原因分析 1. **头文件污染**:系统头文件路径(`/usr/include`)中混入了内核头文件 2. **版本不匹配**:安装的`linux-headers`版本与当前编译的内核版本(6.6.1)不一致 3. **路径优先级错误**:编译时优先搜索了系统头文件而非内核源码树内的头文件 ### 修复步骤 #### 1. 卸载冲突的头文件包 ```bash sudo apt purge linux-headers-* # Debian/Ubuntu # 或 sudo yum remove kernel-headers # RHEL/CentOS ``` #### 2. 安装精确匹配的头文件 ```bash sudo apt install linux-headers-$(uname -r) # 必须与当前运行内核版本一致 ``` #### 3. 设置内核编译环境 ```bash cd /usr/src/linux-6.6.1 # 清理之前错误编译 make distclean # 设置正确头文件路径 make scripts KCFLAGS="-nostdinc -I$(pwd)/include -I$(pwd)/arch/x86/include" ``` #### 4. 重新编译配置工具 ```bash # 确保使用内核自带头文件 sudo make menuconfig HOSTCFLAGS="-nostdinc -I$(pwd)/include -I$(pwd)/arch/x86/include" ``` ### 关键参数说明 | 参数 | 作用 | |------|------| | `-nostdinc` | 禁止搜索标准系统头文件路径 | | `-I$(pwd)/include` | 优先使用内核源码内的头文件 | | `-I$(pwd)/arch/x86/include` | 添加架构特定头文件路径 | ### 预防措施 1. **隔离开发环境**: ```bash # 使用容器编译内核 docker run -v /usr/src:/usr/src -it ubuntu bash ``` 2. **版本验证脚本**: ```bash #!/bin/bash RUNNING_KERNEL=$(uname -r) INSTALLED_HEADERS=$(ls /usr/src | grep linux-headers) [ "$RUNNING_KERNEL" = "${INSTALLED_HEADERS#linux-headers-}" ] || echo "版本不匹配!" ``` 3. **环境变量锁定**: ```bash export C_INCLUDE_PATH="/usr/src/linux-6.6.1/include:$C_INCLUDE_PATH" ``` > ⚠️ **重要提示**:所有内核编译操作均应在**未污染**的环境中执行,避免系统头文件干扰。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值