已Root的Android4.4.2设备执行存在的32位命令行程序提示文件未找到
问题根因
你遇到的「文件存在但执行报No such file or directory」是Android低版本运行自编译二进制的常见问题,核心原因有3个,按出现概率从高到低排序:
- 编译参数不匹配Android 4.4.2的系统要求:你用的NDK目标API版本高于19(Android 4.4.2对应API等级19),动态编译的二进制内置的动态链接器路径和旧版Android不匹配,内核加载ELF文件时找不到链接器就会返回ENOENT错误,被shell识别为文件不存在。
- 架构编译错误:GT-9301i是armv7架构的32位手机,如果你编译的32位二进制是x86架构,也会触发同类型报错。
- 分区挂载限制:/data/local/tmp分区被挂载为
noexec属性,禁止执行分区内的可执行文件。
解决步骤
按顺序执行以下排查操作:
- 验证二进制架构
执行命令file ./file查看输出,确认返回信息包含ARM 32-bit、armeabi-v7a相关描述。如果显示为Intel 80386等x86架构描述,重新编译时指定目标架构为armeabi-v7a即可。 - 优先使用静态编译
编译时添加-static参数生成静态链接的二进制,静态编译的文件不依赖系统动态链接器和内置库,兼容性更强,可直接避开动态链接器路径不匹配的问题。如果必须使用动态编译,将NDK的minSdkVersion/目标API等级改为19再重新编译。 - 修复分区挂载属性
执行命令mount | grep /data/local/tmp查看输出,如果返回结果中包含noexec参数,执行mount -o remount,rw,exec /data/local/tmp重新挂载分区为可执行状态,再尝试运行二进制。 - 备用验证方案
如果以上操作都无效,将二进制移动到/system/bin/目录,授予755权限后再执行,/system分区默认拥有执行权限,可排除挂载属性影响。
内容的提问来源于stack exchange,提问作者han.k
相关产品推荐
相关产品推荐

