使用Busybox编译工具报错


我在使用Busybox编译最下系统,执行
make menuconfig指令的时候报错。

1.报错信息:

HOSTCC scripts/basic/fixdep
HOSTCC scripts/basic/split-include
scripts/basic/split-include.c: In function ‘main’:
scripts/basic/split-include.c:134:6: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result [-Wunused-result]
fgets(old_line, buffer_size, fp_target);
^
HOSTCC scripts/basic/docproc
GEN include/applets.h
GEN include/usage.h
GEN loginutils/Kbuild
GEN loginutils/Config.in
GEN printutils/Kbuild
GEN printutils/Config.in
GEN sysklogd/Kbuild
GEN sysklogd/Config.in
GEN applets/Kbuild
GEN networking/Kbuild
GEN networking/Config.in
GEN networking/udhcp/Kbuild
GEN networking/udhcp/Config.in
GEN networking/libiproute/Kbuild
GEN scripts/Kbuild
GEN procps/Kbuild
GEN procps/Config.in
GEN mailutils/Kbuild
GEN mailutils/Config.in
GEN libbb/Kbuild
GEN libbb/Config.in
GEN libpwdgrp/Kbuild
GEN coreutils/Kbuild
GEN coreutils/Config.in
GEN coreutils/libcoreutils/Kbuild
GEN shell/Kbuild
GEN shell/Config.in
GEN editors/Kbuild
GEN editors/Config.in
GEN selinux/Kbuild
GEN selinux/Config.in
GEN modutils/Kbuild
GEN modutils/Config.in
GEN runit/Kbuild
GEN runit/Config.in
GEN init/Kbuild
GEN init/Config.in
GEN util-linux/Kbuild
GEN util-linux/Config.in
GEN util-linux/volume_id/Kbuild
GEN util-linux/volume_id/Config.in
GEN e2fsprogs/Kbuild
GEN e2fsprogs/Config.in
GEN e2fsprogs/old_e2fsprogs/Kbuild
GEN e2fsprogs/old_e2fsprogs/Config.in
GEN e2fsprogs/old_e2fsprogs/uuid/Kbuild
GEN e2fsprogs/old_e2fsprogs/ext2fs/Kbuild
GEN e2fsprogs/old_e2fsprogs/e2p/Kbuild
GEN e2fsprogs/old_e2fsprogs/blkid/Kbuild
GEN archival/Kbuild
GEN archival/Config.in
GEN archival/libarchive/Kbuild
GEN findutils/Kbuild
GEN findutils/Config.in
GEN console-tools/Kbuild
GEN console-tools/Config.in
GEN miscutils/Kbuild
GEN miscutils/Config.in
GEN debianutils/Kbuild
GEN debianutils/Config.in
HOSTCC scripts/kconfig/conf.o
scripts/kconfig/conf.c: In function ‘conf_askvalue’:
scripts/kconfig/conf.c:106:3: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result [-Wunused-result]
fgets(line, 128, stdin);
^
scripts/kconfig/conf.c: In function ‘conf_choice’:
scripts/kconfig/conf.c:354:4: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result [-Wunused-result]
fgets(line, 128, stdin);
^
HOSTCC scripts/kconfig/kxgettext.o
HOSTCC scripts/kconfig/mconf.o
scripts/kconfig/mconf.c: In function ‘show_textbox’:
scripts/kconfig/mconf.c:847:2: warning: ignoring return value of ‘write’, declared with attribute warn_unused_result [-Wunused-result]
write(fd, text, strlen(text));
^
scripts/kconfig/mconf.c: In function ‘exec_conf’:
scripts/kconfig/mconf.c:481:2: warning: ignoring return value of ‘pipe’, declared with attribute warn_unused_result [-Wunused-result]
pipe(pipefd);
^
SHIPPED scripts/kconfig/zconf.tab.c
SHIPPED scripts/kconfig/lex.zconf.c
SHIPPED scripts/kconfig/zconf.hash.c
HOSTCC scripts/kconfig/zconf.tab.o
In file included from scripts/kconfig/zconf.tab.c:152:0:
scripts/kconfig/zconf.hash.c:155:43: warning: ‘kconf_id_strings_contents’ is static but used in inline function ‘kconf_id_lookup’ which is not static
#define kconf_id_strings ((const char *) &kconf_id_strings_contents)
^
scripts/kconfig/zconf.hash.c:222:44: note: in expansion of macro ‘kconf_id_strings’
register const char *s = o + kconf_id_strings;
^
scripts/kconfig/zconf.hash.c:215:26: warning: ‘kconf_id_hash’ is static but used in inline function ‘kconf_id_lookup’ which is not static
register int key = kconf_id_hash (str, len);
^
scripts/kconfig/zconf.hash.c:171:26: warning: ‘wordlist’ is static but declared in inline function ‘kconf_id_lookup’ which is not static
static struct kconf_id wordlist[] =
^
HOSTLD scripts/kconfig/mconf
HOSTCC scripts/kconfig/lxdialog/checklist.o
In file included from scripts/kconfig/lxdialog/checklist.c:24:0:
scripts/kconfig/lxdialog/dialog.h:31:20: fatal error: curses.h: No such file or directory
compilation terminated.
scripts/Makefile.host:120: recipe for target ‘scripts/kconfig/lxdialog/checklist.o’ failed
make[2]: *** [scripts/kconfig/lxdialog/checklist.o] Error 1
/home/luatao/4412_test/miniLinux/busybox-1.22.1/scripts/kconfig/Makefile:14: recipe for target ‘menuconfig’ failed
make[1]: *** [menuconfig] Error 2
Makefile:443: recipe for target ‘menuconfig’ failed
make: *** [menuconfig] Error 2

在这里插入图片描述
或者报错信息是

HOSTCC scripts/kconfig/lxdialog/checklist.o
In file included from scripts/kconfig/lxdialog/checklist.c:24:0:
scripts/kconfig/lxdialog/dialog.h:31:20: fatal error: curses.h: No such file or directory
compilation terminated.
scripts/Makefile.host:120: recipe for target ‘scripts/kconfig/lxdialog/checklist.o’ failed
make[2]: *** [scripts/kconfig/lxdialog/checklist.o] Error 1
/home/luatao/4412_test/miniLinux/busybox-1.22.1/scripts/kconfig/Makefile:14: recipe for target ‘menuconfig’ failed
make[1]: *** [menuconfig] Error 2
Makefile:443: recipe for target ‘menuconfig’ failed
make: *** [menuconfig] Error 2
在这里插入图片描述

2.解决方法:

这是因为我们缺少依赖库

sudo apt-get install libncurses5-dev

在这里插入图片描述
再次执行

make menuconfig

在这里插入图片描述
成功。

<think>好的,我现在需要解决用户的问题:当PATH环境变量已经包含/usr/bin/busybox时,为什么在其他目录执行./busybox报错“No such file or directory”,以及如何解决这个问题。首先,我得仔细分析可能的原因。 首先,用户提到在PATH中有/usr/bin,而busybox位于该目录下。当他们在另一个目录下执行./busybox时,系统报错找不到文件或目录。这可能涉及到几个方面的问题。 第一个可能性是当前目录下的busybox文件是否存在。如果用户执行的是./busybox,而当前目录下并没有这个可执行文件,自然会报错。这时候需要检查该目录是否存在busybox,或者是否拼写错误。比如用户可能误输入了路径或者文件名。 第二个可能性是文件权限问题。即使文件存在,如果没有执行权限,系统也会拒绝执行。这时候需要检查busybox文件的权限设置,使用ls -l查看是否有x权限,如果没有,需要用chmod +x busybox添加执行权限。 第三个可能性是文件系统挂载问题。如果当前目录所在的文件系统没有正确挂载,或者busybox所在的目录(比如/usr/bin)被挂载为只读,可能导致无法执行。这时候需要检查mount命令的输出,确认相关文件系统的挂载状态和权限。 另外,用户提到PATH环境变量已经包含/usr/bin,所以直接运行busybox应该可以找到,但问题出在执行./busybox,这说明用户可能试图运行当前目录下的另一个busybox实例。这里可能存在动态链接库的问题。如果这个busybox是静态链接的,应该没问题,但如果是动态链接的,而目标系统的库路径不正确,就会导致找不到依赖库。这时候需要用ldd命令检查busybox的依赖库是否存在,并确保库路径正确,可能需要将库文件复制到文件系统的相应位置,如引用[2]提到的拷贝库文件到lib目录。 还有可能是架构不兼容的问题。比如busybox是为arm架构编译的,而当前系统是x86的,导致无法执行。需要用file命令检查busybox的架构信息,确认与当前系统匹配。 总结可能的原因: 1. 当前目录下没有busybox文件 2. 权限不足,无法执行 3. 动态链接库缺失或路径错误 4. 文件系统挂载问题 5. 架构不兼容 解决方案对应步骤: 1. 检查当前目录是否存在busybox使用ls查看 2. 检查文件权限,使用chmod添加执行权限 3. 使用ldd检查依赖库,补充缺失的库文件 4. 检查文件系统挂载状态 5. 确认busybox的架构是否匹配 此外,引用[3]中提到在编译busybox时缺少curses.h,可能涉及依赖库安装的问题,但当前问题可能不同。引用[4]提到在Mobaxterm中设置PATH后解决git的问题,可能提示检查环境变量是否被正确覆盖或冲突。但用户的问题是在特定目录执行./busybox,可能与环境变量无关,因为./使用的是相对路径,而非PATH中的路径。 另外,引用[2]中提到的将库文件复制到lib目录,可能需要用户确保动态链接库的路径正确,尤其是在交叉编译环境下,可能需要将相应的arm库文件复制到目标文件系统的lib目录中。 可能还需要检查busybox是否被正确编译和安装,或者是否损坏。可以通过md5sum检查文件完整性,或者重新下载/编译busybox。 最后,如果用户是在chroot环境中运行,可能会遇到引用[1]中的问题,即缺少必要的二进制文件,比如/bin/bash不存在,导致无法执行。但用户的问题是关于busybox本身,所以需要确认执行环境是否正确,是否缺少依赖的组件。</think>### 问题原因分析 当系统环境变量 `PATH` 包含 `/usr/bin/busybox` 时,在另一路径下执行 `./busybox` 报错 `No such file or directory`,可能由以下原因导致: 1. **文件路径或名称错误** 执行 `./busybox` 时,系统会尝试在当前目录下查找 `busybox` 可执行文件。若当前目录不存在此文件,或文件名拼写错误(如大小写不一致),则会触发此错误。 2. **文件权限问题** 即使文件存在,若未赋予可执行权限,系统会拒绝执行。可通过以下命令检查权限: ```bash ls -l ./busybox ``` 若无 `x` 权限,需使用 `chmod +x ./busybox` 添加。 3. **动态链接库缺失** 若 `busybox` 是动态链接编译的,但目标系统缺少依赖的动态库(如 `libc.so`),则会报错。可通过以下命令检查依赖库: ```bash ldd ./busybox ``` 若显示 `not found`,需将依赖库复制到文件系统的 `/lib` 或 `/usr/lib` 目录[^2]。 4. **架构不兼容** 若 `busybox` 是为其他架构(如 ARM)编译的,而在 x86 系统上运行,会导致无法执行。可使用 `file ./busybox` 检查二进制文件架构。 --- ### 解决方案 1. **验证文件存在性** 确认当前目录下存在 `busybox` 文件: ```bash ls ./busybox ``` 2. **检查并修复权限** 添加可执行权限: ```bash chmod +x ./busybox ``` 3. **修复动态链接库问题** - 若依赖库缺失,需将编译环境的库文件(如 `/usr/local/arm/.../libc/lib` 下的 `.so` 和 `.a` 文件)复制到目标系统的 `/lib` 目录[^2]。 - 使用静态编译版本的 `busybox`(编译时添加 `CONFIG_STATIC=y` 选项)。 4. **验证架构兼容性** 确保 `busybox` 的编译架构与当前系统匹配: ```bash file ./busybox ``` 5. **检查文件系统完整性** 若在 `chroot` 环境中操作,需确保 `/bin/bash` 等基础组件存在[^1]。若使用 `busybox` 替代标准工具链,需正确配置符号链接。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值