elf_i386:没有那个文件或目录 解决方法

本文详细介绍了在使用makemenuconfig配置内核并选择默认配置后,遇到gcc编译错误的问题,并提供了修改内核目录下Makefile文件的方法来解决此问题。通过替换特定的架构相关参数,最终成功编译内核。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在make menuconfig配置完之后(选的默认配置),然后就make出现如下错误:
gcc: 错误: elf_i386:没有那个文件或目录
make[2]: *** [arch/x86/vdso/vdso32-int80.so.dbg] 错误 1
make[1]: *** [arch/x86/vdso] 错误 2
make: *** [sub-make] 错误 2


原因是 gcc 4.6 不再支持 linker-style 架构。

修改:
1.在内核目录arch/x86/vdso/Makefile中,大约在28,29行 找到 VDSO_LDFLAGS_vdso.lds = -m elf_x86_64 -Wl,-soname=linux-vdso.so.1 \   -Wl,-z,max-page-size=4096 -Wl,-z,common-page-size=4096 把"-m elf_x86_64" 替换为 "-m64"

2然后再继续找,大约在72行左右,找到VDSO_LDFLAGS_vdso32.lds = -m elf_i386 -Wl,-soname=linux-gate.so.1中的 "-m elf_i386" 替换为 "-m32"

然后继续编译,就可以了。

<think>好的,我现在需要解决用户的问题:“-bash: ./test_back_bsd: cannot execute required file not found”。首先,我得分析可能的原因。用户尝试执行一个名为test_back_bsd的文件,但系统提示无法找到文件无法执行。这可能涉及文件权限、文件路径、架构兼容性者解释器问题。 首先,检查文件是否存在。用户可能输入了错误的路径文件名,所以应该先确认当前目录下是否有这个文件。可以用ls命令查看,比如执行`ls -l ./test_back_bsd`,看看文件是否存在,权限如何。如果不存在,用户需要确认路径是否正确,文件是否被误删。 其次,文件权限的问题。即使文件存在,如果没有执行权限,系统也会报错。这时候需要用chmod命令添加执行权限,比如`chmod +x ./test_back_bsd`。然后再次尝试执行。 如果权限没问题,接下来考虑文件类型是否可执行。使用file命令检查文件类型,比如`file ./test_back_bsd`。如果文件是二进制文件,需要确认是否适用于当前系统的架构。例如,用户可能在Linux系统上运行一个为BSD编译的二进制文件者是在x86_64系统上运行ARM架构的二进制文件。这种情况下,需要获取正确版本的二进制文件者安装兼容层如qemu。 另一种可能是脚本文件缺少shebang行。如果test_back_bsd是一个脚本,比如ShellPython脚本,第一行需要有正确的解释器路径,例如`#!/bin/bash``#!/usr/bin/env python3`。如果没有这个,系统不知道如何执行该脚本,也会报错。这时需要用户手动添加合适的shebang行,者用解释器直接运行,比如`bash ./test_back_bsd``python3 ./test_back_bsd`。 还有可能是文件系统挂载问题,比如文件所在的磁盘被挂载为noexec选项,禁止执行。这种情况下,用户需要重新挂载磁盘者复制文件到其他位置执行。可以用mount命令查看挂载选项,确认相关目录是否设置了noexec。 此外,动态链接库缺失也可能导致问题,尤其是在运行二进制文件时。使用ldd命令检查依赖库是否存在,例如`ldd ./test_back_bsd`。如果有缺失的库,需要安装相应的软件包。 最后,考虑系统兼容性问题,比如在macOS上运行Linux的二进制文件者32位与64位不兼容。可能需要使用虚拟化工具重新编译源代码。 总结下来,解决步骤大致是:确认文件存在→检查权限→确认文件类型和架构→检查shebang行→查看挂载选项→检查依赖库→处理系统兼容性。需要用户一步步排查,找出具体原因。</think>### 逐步解决方案 遇到 `-bash: ./test_back_bsd: cannot execute required file not found` 错误时,可按照以下步骤排查: 1. **确认文件是否存在** 执行以下命令检查文件路径和名称是否正确: ```bash ls -l ./test_back_bsd ``` -文件不存在,需确认文件名拼写文件是否被删除。 - 若路径错误,使用绝对路径(如 `/home/user/test_back_bsd`)替代相对路径。 2. **检查文件执行权限** 若文件存在但无执行权限,添加权限: ```bash chmod +x ./test_back_bsd ``` 再次尝试运行: ```bash ./test_back_bsd ``` 3. **验证文件类型和架构兼容性** 使用 `file` 命令检查文件类型: ```bash file ./test_back_bsd ``` - 若为二进制文件(如 `ELF 64-bit`),需确认系统架构是否匹配(如 x86_64 系统无法直接运行 ARM 架构程序)。 - 若为脚本文件(如 Shell/Python),需检查是否缺少 **shebang 行**。 4. **检查脚本的 Shebang 行** 若文件是脚本,确保第一行包含正确的解释器路径。例如: ```bash #!/bin/bash # Shell 脚本 ``` ```python #!/usr/bin/env python3 # Python 脚本 ``` 若无 shebang 行,手动指定解释器运行: ```bash bash ./test_back_bsd # 假设是 Shell 脚本 python3 ./test_back_bsd # 假设是 Python 脚本 ``` 5. **排查文件系统挂载限制** 若文件所在分区挂载时设置了 `noexec` 选项,系统会禁止执行。通过以下命令查看挂载选项: ```bash mount | grep /path/to/file_directory ``` 若输出包含 `noexec`,需重新挂载分区复制文件到其他可执行目录(如 `/tmp`)。 6. **检查动态链接库依赖(仅限二进制文件)** 若为二进制文件,依赖库缺失可能导致错误。使用 `ldd` 检查依赖: ```bash ldd ./test_back_bsd ``` 若有 `not found` 的库,需安装对应软件包(如通过 `apt install` `yum install`)。 7. **处理跨系统兼容性问题** - 在 macOS 上运行 Linux 二进制文件:需使用虚拟化工具(如 Docker)重新编译。 - 32位程序在64位系统运行:安装兼容库(如 Ubuntu 的 `libc6-i386`)。 --- ### 示例操作流程 假设文件是 Shell 脚本但缺少执行权限: ```bash $ ls -l test_back_bsd -rw-r--r-- 1 user user 0 Aug 10 10:00 test_back_bsd # 无执行权限 $ chmod +x test_back_bsd $ ./test_back_bsd Hello World! # 成功执行 ``` --- ### 相关问题 1. 如何为 Shell 脚本添加调试功能? 2. 在 Linux 中如何查看二进制文件的依赖库? 3. macOS 和 Linux 的二进制文件兼容性如何解决
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值