今天在Ubuntu9.10上编译busybox,执行make menuconfig后发现了如下错误
scripts/kconfig/lxdialog/checklist.c:283: warning: implicit declaration of function ‘delwin’
scripts/kconfig/lxdialog/checklist.c:287: error: ‘KEY_LEFT’ undeclared (first use in this function)
scripts/kconfig/lxdialog/checklist.c:288: error: ‘KEY_RIGHT’ undeclared (first use in this function)
make[2]: *** [scripts/kconfig/lxdialog/checklist.o] Error 1 make[1]: *** [menuconfig] Error 2
make: *** [menuconfig] Error 2
原因:
缺少libncurses5-dev 头文件
解决方法:
sudo apt-get install libncurses5-dev
1).miscutils/ionice.c:16: error: 'SYS_ioprio_set' undeclared (first use in> this function)
解决方法:在busybox应用里关闭 ionice 选项$ make meunconfig选择下面的菜单:Miscellaneous Utilities --->[ * ] ionice按空格去掉这个选项2).miscutils/ubi_tools.c:63:26: mtd/ubi-user.h: No such file or directorymiscutils/ubi_tools.c: In function `ubi_tools_main':miscutils/ubi_tools.c:133: error: `UBI_DEV_NUM_AUTO' undeclared (first use in this function)解决办法:在include下新建mtd目录,从linux-2.6.28.7/include/mtd拷贝文件ubi-user.h到该目录下3).networking/interface.c:806: error: `ARPHRD_INFINIBAND' undeclared here (not in a function)networking/interface.c:806: error: initializer element is not constantnetworking/interface.c:806: error: (near initialization for `ib_hwtype.type')在文件interface.c中加入如下语句#define ARPHRD_INFINIBAND 32 /* InfiniBand */这个是从文件include/linux/if_arp.h中得到4).......parse error before '_u16'......parse error before 'jk'......parse error before knetworking/udhcp/dhcpc.c: In function `udhcp_raw_socket':networking/udhcp/dhcpc.c:821: error: elements of array `filter_instr' have incomplete type搜了一下百度,网上最多的解决方法是把networking都干掉,我根据提示,改了一下,将/FL2440/usr/local/arm/3.4.1/arm-linux/sys-include/llinux/filter.h中的sock_filter类型的定义改成了struct sock_filter /* Filter block */ { unsigned short code; /* Actual filter code */ 原来为__u16 unsigned char jt; /* Jump true */ unsigned char jf; /* Jump false */ unsigned int k; /* Generic multiuse field */ };或者直接添加头文件 #include <linux/types.h>5)./opt/arm/3.4.1/bin/../lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/percpu.h:45: error: `GFP_KERNEL' undeclared (first use in this function)/opt/arm/3.4.1/bin/../lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/percpu.h:45: error: (Each undeclared identifier is reported only once/opt/arm/3.4.1/bin/../lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/percpu.h:45: error: for each function it appears in.)In file included from /opt/arm/3.4.1/bin/../lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/ext2_fs.h:20,网上建议的解决方法是:去掉Linux System Utilities --->[ ] mkfs_ext2[ ] mkfs_vfat我没有采纳,在percpu.h中定义了#define GFP_KERNEL 0 (改值参考内核代码)后面又出现了类似4中的问题,估计是u16,u32等类型未定义无法识别造成的parse error before..错误,用类似方法得以解决,不必采用极端的注释掉的方法。当然,最为理想的是包含头文件#include <linux/types.h>6).出错:linux/ext2_fs_sb.h中342行出现的void __usr *data无法识别,添加头文件#include <linux/compiler.h>