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 を持っていますが、それでも同じ問題があります。http://code.google.com/p/native-android-development/downloads/detail?name=android
の android-gcc-4.4.0 ツールチェーンを使用して、段階的にコンパイル (コンパイル、アセンブル、リンク) しました。-gcc-4.4.0.tar.gz&can=2&q=
これが私の ENOENT を与える理由は何ですか?
どんな助けでも感謝します。
前もって感謝します。