我在 Android (ARM) 上编译、组装和链接了一个文件,并希望在 Android (ARM) 上执行它。
我的 /data/data/Package.AppName/files 文件夹中有一个 a.out 文件。
该文件存在,如果我尝试使用文件获取有关它的信息,我会得到输出:
a.out: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
所以我确定该文件存在于该目录中。
如果我从 Java 访问此文件 IsReadable 为 true,则 IsWriteable 为 true,IsExecutable 为 true。
我尝试使用以下命令执行它:
/data/data/Package.AppName/files/a.out
但这让我跟随 strace:
9001 execve("/data/data/Package.AppName/files/a.out", ["/data/data/Package.AppName/files/a.out"], [/* 16 vars */]) = -1 ENOENT (No such file or directory)
9001 dup(2) = 3
9001 fcntl64(3, F_GETFL) = 0x1 (flags O_WRONLY)
9001 close(3) = 0
9001 write(2, "strace: exec: No such file or directory\n", 40) = 40
9001 exit_group(1) = ?
编辑1:
我正在检查文件是否存在以及在执行之前它具有哪些权限:
ls -l strace -f data/data/.../files/a.out
这给了我 -rwx----- u0_a63 u0_a63 4583 2013-05-17 17:07 a.out
所以这个文件存在。我只是通过调用它来执行:
String[] command = {"strace", "-f", "data/data/.../files/a.out"};
Runtime.getRuntime().exec(command);
编辑2: 我用过:
f.setReadable(true, false);
f.setWritable(true, false);
f.setExecutable(true, false)
现在它有权限-rwxrwxrwx,但仍然是同样的问题。
我使用来自以下网址的 android-gcc-4.4.0 工具链逐步编译(编译、组装、链接):http ://code.google.com/p/native-android-development/downloads/detail?name=android -gcc-4.4.0.tar.gz&can=2&q=
知道为什么这会给我 ENOENT 吗?
任何帮助表示赞赏。
提前致谢。