2017-01-20 16 views
0

私はgccを使ってubuntuでコンパイルされたCプログラムが必要です。私はアンドロイド端末で実行可能ファイルを実行したい。私が実行すると、 "ファイルまたはディレクトリが見つかりません"または "実行可能でない:ELF32"のいずれかが表示されます。 Android端末でコードを実行します。 gccに他のコンパイラを使用する方法やフラグがあるので、アンドロイド端末でコードを実行できます。アンドロイド-XX端末でCプログラムを実行するには?

答えて

0

AndroidはUbuntuと同じシステムライブラリを使用しないため、見つからないでしょう。

2つの解決策があります。

  1. は、必要なライブラリをコピーします。

    Ubuntuで同じファイルシステムの場所に置くことができれば、ld-linux.soを手動で実行してライブラリを見つける場所を指定する必要があります。あるいは、プログラムを再リンクして、非標準的な場所に動的リンカーとライブラリを見つけることができます。 chrootを使うこともできますが、それにはrootが必要です。chrootバイナリを見つける必要があります。

  2. スタティックリンクを使用してください。

    これは通常、GCCに-staticを渡すことを意味します。依存性のない完全に自己完結型であるはるかに大きなバイナリが得られます。すべてのライブラリの静的バージョンが、ビルドシステムで使用可能であることが必要です。また、DNSルックアップなどの一部の機能では、共有ライブラリが常に必要になるため、この方法では機能しません。

でも、いくつかのLinux機能が動作しないと予想する必要があります。基本的に、/ etcにハードウェアの機能や設定ファイルが必要なものは、多大な労力を必要とします。これを既に行っている様々なプロジェクトがあります( "linux chroot android"を検索してください)。

「実行不可:ELF32」というメッセージの意味はわかりませんが、32ビットまたは64ビットの実行可能ファイルをビルドしているか、Androidバイナリが使用しているかを確認する必要があります(file <whatever>)。

+0

私は-staticでコンパイルしましたが、2番目のエラーを示しています。 "not executable:ELF32"。アンドロイドプラットフォーム用にコンパイルされる-mandroidのようなgccには、いくつかのアンドロイド固有のフラグがあります。しかし、 "/ usr/bin/ld:のようなエラーはcrtbegin_static.oを見つけることができません:そのようなファイルやディレクトリはありません。 collect2:エラー:ldは1終了ステータスを返しました"。 –

+0

ログに手掛かりがありますか? ( '' logcat'を実行してください。)AndroidはSELinuxを使用しているので、あなたの方法でセキュリティポリシーが存在する可能性があります。 – ams

関連する問題