2017-11-17 21 views
1

私は昨夜までAndroidでCppDroidで自分のコードをコンパイルしていました。TermuxでCコードを実行するにはclangでコンパイル

アプリをアップデートした後、position independent executableエラーを表示し始めました。

古いバージョンを再インストールしましたが、同じエラーが発生しています。

私はそれがAndroid 5.0以上で問題であることを知っています。しかし、その後、CppDroidは昨夜までどのように動作しましたか?誰か私に答えや手がかりを与えることができますか?

TermuxはClangのみを提供します。誰も私にCコードを正常にコンパイルする方法を教えてもらえますか?ファイルモードが0777ですが

Permission denied error

enter image description here

+0

a.outの許可と所有者を確認しましたか? – klutt

+0

@klutt別の画像を追加しました。あなた自身を見てください。私は許可シンボルを理解していません。 – Tangent

+0

実行するにはrootにする必要があるようです。 – klutt

答えて

1

のAndroidは、共有ストレージ上のファイルはnoexecにマウントすることによってを実行することはできません。

あなたは

/system/bin/mount | grep /storage 

を実行する場合は、このような何か見つけることができます:

/data/media on /storage/emulated type sdcardfs (rw,nosuid,nodev,noexec,noatime,low_uid=1023,low_gid=1023,gid=9997,multi_user,mask=0007,reserved=100MB) 
                   ^~~~~~ 

実際のマウントポイントは、(/storage/sdcard0)異なる場合がありますが、それは確実にnoexecが搭載されています。

実行を実行する前に、実行ファイルをTermuxのホームディレクトリ(またはext4マウントポイントのどこか)に移動する必要があります。これがCppDroidの機能です。ソースコードはどこにでも保存できますが、内部ストレージ内の実行可能ファイルのみを実行します。

あなたはTermuxで実行したい場合は、この従ってください: "位置独立した実行ファイル(PIE)" の問題については

$ cp <your-program> ~/a.out 
$ chmod 777 ~/a.out 
$ ~/a.out 
program output 
$ 

を、私はあなたにCppDroidのための明確なデータを示唆しています。コンパイラとしてGCCを使用しています。これは、PIE実行可能ファイルを生成するためには、-pieオプションが必要です。どのような設定が混乱しているのか分かっているなら、自分で修正することもできます。

Termuxが提供するClangコンパイラは、デフォルトでPIE実行可能ファイルを生成します。

+0

Thenコードをどのように実行できますか? @iBug – Tangent

+1

@Tangent Clangに何か問題はありません。 – iBug

+0

それは働かなかった。 "chmod 777〜/ a.out"を実行しても同じエラーが表示されます – Tangent

関連する問題