arm-linux-gcc4.4.4编译busybox-1.25.1

来源:互联网 发布:sql express 安装失败 编辑:程序博客网 时间:2024/05/17 04:04
arm-linux-gcc4.4.4编译busybox-1.25.1
编译出现了一些问题,是因为arm-linux-gcc 比较旧,而busybox 比较新
用较新的gcc 应该不会出问题。
1. tar -xjvf busybox-1.25.1.tar.bz2
2. make defconfig
3. make menuconfig
  Busybox Setting ----->
    Build Options ----->
        //1选择将busybox进行静态编译
        [*]Build BusyBox as a static binary (no shared libs)
        //2.指定交叉编译器为
        (arm-linux-)Cross Compiler prefix
保存退出

make
出现如下编译错误:
miscutils/nandwrite.c:151: error: 'MTD_FILE_MODE_RAW' undeclared (first use in this function)
解决办法:
查MTD_FILE_MODE_RAW在/usr/include/mtd/mtd-abi.h中定义, 但arm-linux-gcc 使用的是交叉编译的路径,以我的为例,在如下位置。
/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/arm-fsl-linux-gnueabi/multi-libs/usr/include/mtd/mtd-abi.h
注意观察你的/usr/include 路径,找到正确使用的mtd-abi.h 文件。
把系统文件中的定义copy到交叉编译文件中即可。 可以看出新的文件是有的,旧的文件中没有该定义。这是移植常见的问题。
如果用旧一点的busybox 配旧一点的gcc, 就不会出现该符号,但相应也就不支持该功能。

修改后继续编译,出现如下编译错误:
util-linux/blkdiscard.c:72: error: 'BLKSECDISCARD' undeclared (first use in this function)
解决办法:
查该宏在linux/fs.h 中有定义, 找到交叉编译的multi-libs/usr/include/linux/fs.h, 把新版本添加的几个宏copy过来。
继续编译: 出现如下链接错误:
util-linux/lib.a(nsenter.o): In function `nsenter_main':
nsenter.c:(.text.nsenter_main+0x1b0): undefined reference to `setns'
coreutils/lib.a(sync.o): In function `sync_main':
sync.c:(.text.sync_main+0x7c): undefined reference to `syncfs'
collect2: ld returned 1 exit status
解决办法:
setns 在何方定义就不清楚了, 一个简单的办法是屏蔽掉该模块

继续编译,通过。
用make install, 安装到./_INSTALL

另外:
用arm-linux-gcc4.4.4 编译busybox-1.23.2
无痛通过, 爽!

于是得出结论: 这是本贴的目的之一,
旧的gcc不要编译最新的代码, 你可能得不到最新功能(可能也根本不需要)
从此要减少开源代码编译成本!




0 0
原创粉丝点击