busybox安装出错:“arm-none-linux-gnueabi-gcc: not found”

本文介绍了解决在Ubuntu12.04系统中使用BusyBox时遇到的交叉编译错误“arm-none-linux-gnueabi-gcc:not found”的详细步骤。包括下载并安装交叉编译工具、配置环境变量及安装32位库等关键操作。

1 软件环境

Ubuntu 12.04.1 LTS
busybox 1.21.1
arm-linux-4.4.1

2 问题描述

最近在制作linux最小系统的时候需要用到busybox软件,在编译busybox软件时报错“arm-none-linux-gnueabi-gcc: not found”。说明在编译时没有找到交叉编译工具。

这里写图片描述

3 解决办法

ubuntu系统中没有安装交叉编译工具,因此需要安装一个。下载交叉编译工具文件arm-linux-4.4.1.tar.gz,放在linux的一个目录下,这个目录将会成为交叉编译工具的安装目录,不能随便删除了。我的存放目录是“/usr/local/arm”。

这里写图片描述

采用shell命令:tar -xvf arm-linux-4.4.1.tar.gz 4.4.1 解压压缩包并重名为“4.4.1”。

这里写图片描述

解压成功后,采用ls指令查看,发现arm目录下多了一个4.4.1目录,这就是刚才的解压文件目录。

这里写图片描述

查看目录4.4.1中的内容,可知里边有一个arm-none-linux-gnueabi目录。进入之后查看内容,可知里边有一个bin目录,再进去查看,可以找到arm-none-linux-gnueabi相关的交叉编译工具可执行文件。至此已经找到交叉编译工具的存放路径:/usr/local/arm/4.4.1/arm-none-linux-gnueabi/bin

这里写图片描述

接下来需要配置环境变量,采用shell指令:vim /etc/profile 打开环境变量配置文件。在最后一行添加:export PATH=$PATH:/usr/local/arm/4.4.1/arm-none-linux-gnueabi/bin 保存后退出。

这里写图片描述

这里写图片描述

执行命令:source /etc/profile使刚才修改的环境变量生效。

这里写图片描述

验证一下是否安装成功,在shell命令行输入:arm-none-linux-gnueabi-,然后按Tab键,可以显示所有的arm-none-linux-gnueabi工具。这说明环境变量设置成功。

这里写图片描述

在shell命令行输入:arm-none-linux-gnueabi-gcc -v,会显示交叉编译器的版本信息。如果还是提示未找到arm-none-linux-gnueabi-gcc,则可能是缺少32位的库造成的。因此Ubuntu12.04用的是64位的,相应的库也是64位的,因此缺少32位的库。采用指令:sudo apt-get install ia32-libs安装32位的库之后重新执行arm-none-linux-gnueabi-gcc -v 指令。

这里写图片描述

重新对busybox进行配置,然后执行make指令成功。上边的问题解决。

make: *** [applets_dir] Error 2 root@zhaotianzhong:/home/minilinux/busybox-1.22.1# source /etc/profile root@zhaotianzhong:/home/minilinux/busybox-1.22.1# arm-none-linux-gnueabi-gcc -v Using built-in specs. Target: arm-none-linux-gnueabi Configured with: /scratch/julian/2009q3-respin-linux-lite/src/gcc-4.4/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --enable-extra-sgxxlite-multilibs --with-arch=armv5te --with-gnu-as --with-gnu-ld --with-specs='%{funwind-tables|fno-unwind-tables|mabi=*|ffreestanding|nostdlib:;:-funwind-tables} %{O2:%{!fno-remove-local-statics: -fremove-local-statics}} %{O*:%{O|O0|O1|O2|Os:;:%{!fno-remove-local-statics: -fremove-local-statics}}}' --enable-languages=c,c++ --enable-shared --disable-lto --enable-symvers=gnu --enable-__cxa_atexit --with-pkgversion='Sourcery G++ Lite 2009q3-67' --with-bugurl=https://support.codesourcery.com/GNUToolchain/ --disable-nls --prefix=/opt/codesourcery --with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-build-sysroot=/scratch/julian/2009q3-respin-linux-lite/install/arm-none-linux-gnueabi/libc --with-gmp=/scratch/julian/2009q3-respin-linux-lite/obj/host-libs-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --with-mpfr=/scratch/julian/2009q3-respin-linux-lite/obj/host-libs-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --with-ppl=/scratch/julian/2009q3-respin-linux-lite/obj/host-libs-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --with-cloog=/scratch/julian/2009q3-respin-linux-lite/obj/host-libs-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --disable-libgomp --enable-poison-system-directories --with-build-time-tools=/scratch/julian/2009q3-respin-linux-lite/install/arm-none-linux-gnueabi/bin --with-build-time-tools=/scratch/julian/2009q3-respin-linux-lite/install/arm-none-linux-gnueabi/bin Thread model: posix gcc version 4.4.1 (Sourcery G++ Lite 2009q3-67) root@zhaotianzhong:/home/minilinux/busybox-1.22.1# make /home/minilinux/busybox-1.22.1/scripts/gcc-version.sh: line 11: arm-linux-gnueabi-gcc: command not found CC applets/applets.o /bin/sh: 1: arm-linux-gnueabi-gcc: not found make[1]: *** [applets/applets.o] Error 127 make: *** [applets_dir] Error 2 root@zhaotianzhong:/home/minilinux/busybox-1.22.1#
12-24
<think>根据用户的问题,用户遇到了编译BusyBox时出现"make: arm-dspg-linux-gnueabi-gcc: No such file or directory"的错误。这个错误通常表明编译过程中找不到交叉编译器。结合引用内容,我们可以从以下几个方面解决: 1. **确认交叉编译器路径是否正确**:检查环境变量`PATH`是否包含交叉编译器的`bin`目录。 2. **检查交叉编译器是否安装正确**:确认交叉编译器是否存在,并具有可执行权限。 3. **32位兼容库**:在64位系统上编译32位程序时,可能需要安装32位兼容库(如引用[3]和[5]中提到的)。 4. **使用`file`命令检查交叉编译器**(如引用[5]所示),确认交叉编译器是否适用于当前系统架构。 以下是具体的解决步骤: --- ### 一、检查交叉编译器路径 1. **确认交叉编译器的安装路径** 例如,如果交叉编译安装在`/opt/dspg-toolchain/bin`目录下,确保该路径已添加到`PATH`环境变量: ```bash export PATH=$PATH:/opt/dspg-toolchain/bin ``` 2. **验证路径是否正确** 使用`which`命令检查编译器是否存在: ```bash which arm-dspg-linux-gnueabi-gcc ``` 如果返回路径(如`/opt/dspg-toolchain/bin/arm-dspg-linux-gnueabi-gcc`),则路径设置正确;否则,请检查路径是否正确。 --- ### 二、安装32位兼容库(64位系统) 在64位Ubuntu系统上运行32位交叉编译器时,需要安装32位兼容库(参考引用[3]和[5]): 1. **安装依赖库** 对于较新的Ubuntu版本(如16.04及以上): ```bash sudo apt-get install lib32z1 lib32ncurses5 lib32stdc++6 ``` 对于旧版Ubuntu(如12.04): ```bash sudo apt-get install ia32-libs # 适用于Ubuntu 12.04及更早版本 ``` 2. **验证动态链接** 使用`ldd`检查交叉编译器的依赖是否满足: ```bash ldd $(which arm-dspg-linux-gnueabi-gcc) ``` 如果有缺失的库(显示为`not found`),则需要安装对应的32位版本。 --- ### 三、验证交叉编译器可执行性 1. **检查文件权限** 确保交叉编译器可执行: ```bash ls -l $(which arm-dspg-linux-gnueabi-gcc) ``` 如果权限不足,添加可执行权限: ```bash chmod +x /opt/dspg-toolchain/bin/arm-dspg-linux-gnueabi-gcc ``` 2. **检查文件架构兼容性** 使用`file`命令(参考引用[5]): ```bash file $(which arm-dspg-linux-gnueabi-gcc) ``` 输出应包含`32-bit`(如果是32位编译器)且无损坏信息。 --- ### 四、BusyBox 配置中指定交叉编译器 在 BusyBox 的 `menuconfig` 中显式设置交叉编译器前缀(参考引用[4]): 1. 运行配置菜单: ```bash make menuconfig ``` 2. 导航到配置项: ``` Busybox Settings → Build Options → Cross Compiler prefix ``` 3. 输入编译器前缀(带短横线): ``` arm-dspg-linux-gnueabi- ``` 4. 保存配置后重新编译。 --- ### 五、完整解决流程示例 ```bash # 1. 安装32位兼容库(以Ubuntu 20.04为例) sudo apt-get update sudo apt-get install lib32z1 lib32ncurses5 lib32stdc++6 # 2. 设置环境变量 export PATH=$PATH:/opt/dspg-toolchain/bin # 3. 检查编译器 which arm-dspg-linux-gnueabi-gcc # 应返回有效路径 file $(which arm-dspg-linux-gnueabi-gcc) # 检查文件类型 # 4. 进入BusyBox源码目录 cd busybox-1.36.1 # 5. 清理之前的配置 make distclean # 6. 配置编译器前缀(两种方式任选其一) # 方法一:通过环境变量 export CROSS_COMPILE=arm-dspg-linux-gnueabi- # 方法二:通过menuconfig(推荐) make menuconfig # 在图形界面中设置Cross Compiler prefix # 7. 编译并安装 make make install CONFIG_PREFIX=/target/rootfs ``` > **注意**:如果使用`sudo`运行`make`,请确保环境变量传递给`sudo`: > ```bash > sudo -E make # -E 保留当前环境变量 > ``` --- ### 六、常见问题排查 - **错误:`arm-dspg-linux-gnueabi-gcc: command not found`** 原因:`PATH`未正确设置或编译器未安装- **错误:`No such file or directory`(即使路径正确)** 原因:通常是缺少32位兼容库(解决方案见第二步)。 - **错误:`permission denied`** 原因:编译器文件权限不足,使用`chmod +x`修复。 §§相关问题§§ 1. 如何在 Ubuntu 中安装 32 位兼容库? 2. BusyBox 编译时如何正确设置交叉编译器前缀? 3. 交叉编译器在 64 位系统上不工作如何解决?[^3][^5] </think> ### 解决 BusyBox 编译时出现 "make: arm-dspg-linux-gnueabi-gcc: No such file or directory" 错误的方法 #### 一、核心问题诊断 该错误表明编译系统无法找到交叉编译器,主要原因如下: 1. **交叉编译器未安装**(引用[1]) 2. **环境变量未正确配置** 3. **缺少 32 位兼容库**(64 位系统中运行 32 位编译器) 4. **编译器路径未添加到 `sudo` 环境**(引用[2]) --- #### 二、完整解决步骤 ##### 1. **验证编译器存在性** ```bash ls /opt/dspg-toolchain/bin/arm-dspg-linux-gnueabi-gcc ``` - 如果不存在:重新安装工具- 如果存在但报错:进入步骤 2 ##### 2. **安装 32 位兼容库(关键步骤)** ```bash # Ubuntu 18.04 及以上 sudo apt-get install lib32z1 lib32ncurses5 lib32stdc++6 # Ubuntu 12.04/14.04(引用[3]) sudo apt-get install ia32-libs # 或替代方案: sudo apt-get install lib32ncurses5 lib32z1 ``` ##### 3. **配置环境变量** ```bash export PATH=$PATH:/opt/dspg-toolchain/bin export CROSS_COMPILE=arm-dspg-linux-gnueabi- ``` > **验证配置**: > ```bash > which ${CROSS_COMPILE}gcc # 应返回有效路径 > ``` ##### 4. **解决 `sudo` 环境问题**(引用[2]) ```bash # 方法1:使用 -E 保留环境变量 sudo -E make install # 方法2:切换到 root 后重新导出 sudo -s export PATH=$PATH:/opt/dspg-toolchain/bin make install ``` ##### 5. **在 BusyBox 配置中显式指定编译器** ```bash make menuconfig ``` 导航至: ``` Busybox Settings → Build Options → Cross Compiler prefix ``` 输入:`arm-dspg-linux-gnueabi-`(注意结尾短横线,引用[4]) --- #### 三、深度问题排查 ##### 情况1:编译器为 32 位程序(引用[5]) ```bash file $(which arm-dspg-linux-gnueabi-gcc) ``` 若输出包含 `ELF 32-bit`: ```bash # 安装所有 32 位依赖 sudo apt-get install gcc-multilib # 验证依赖 ldd $(which arm-dspg-linux-gnueabi-gcc) | grep "not found" ``` ##### 情况2:工具链损坏 ```bash # 重新下载并安装工具链 tar -xvf dspg-toolchain.tar.gz -C /opt chmod -R +x /opt/dspg-toolchain/bin ``` --- #### 四、完整编译示例 ```bash # 设置环境 export PATH=$PATH:/opt/dspg-toolchain/bin export CROSS_COMPILE=arm-dspg-linux-gnueabi- # 配置 BusyBox cd busybox-1.36.1 make menuconfig # 在 GUI 中确认编译器前缀 # 编译安装(带权限) sudo -E make CONFIG_PREFIX=/target/fs install ``` > **重要提示**:编译成功后验证二进制文件架构: > ```bash > file /target/fs/bin/busybox | grep ARM > ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值