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不要编译最新的代码, 你可能得不到最新功能(可能也根本不需要)
从此要减少开源代码编译成本!
编译出现了一些问题,是因为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
- arm-linux-gcc4.4.4编译busybox-1.25.1
- arm-linux-gcc4.4.3编译busybox-1.25.1
- arm-linux-gnueabihf- 编译 busybox-1.26.1
- ARM-Linux平台的Busybox交叉编译
- ARM-Linux-gcc4.3.2交叉编译错误问题
- ubuntu14.04配置arm-linux-gcc4.4.3交叉编译环境
- arm-linux-gcc4.3.2编译kernel 2.6.24成功,gcc4.3 内核
- linux下编译gcc4
- arm-linux-gcc4.4.3安装
- arm开发板的arm-linux-gcc4.5.1不能编译c++11新特性的解决方案
- 利用make CROSS_COMPILE=arm-linux- 编译busybox 出错
- Arm Busybox 1.00-pre10 编译
- linux 编译安装GCC4.9.3
- warning: target CPU does not support interworking(arm-linux-gcc4.4.3编译uboot1.1.6)
- arm-linux-gcc4.4.3 交叉编译环境搭建&错误修正 fedora 19(KDE)
- 编译busybox提示arm-linux-gcc内容中arm-none-linux-gnueabi-找不到
- ubuntu11.10 下 arm-linux-gcc4.4.3
- ubuntu 下 arm-linux-gcc4.4.3
- Windows10 IME占用过高临时解决办法
- 如果遇到无法响应或者没遇见过的bug
- 大小端
- 理解OpenGLSuperbible7-窗口和GLContext
- 15个Android开源框架
- arm-linux-gcc4.4.4编译busybox-1.25.1
- Java中BigDecimal的8种舍入模式
- 求大神指教!!!
- iOS的各种加密方法使用简介
- 标准ie8下,出现滚动条,但是没有滚动块的解决方法
- .Net中Remoting通信机制简单实例
- TextView文本框
- 【转】Laravel 5.1 LTS 速查表
- git应用的几点总结