2017-11-17 3 views
1

Ich habe meinen Code mit CppDroid auf Android bis letzte Nacht kompiliert.Laufender C-Code in Termux kompiliert von clang

Nach der Aktualisierung der App begann es position independent executable Fehler anzuzeigen.

Ich habe die ältere Version neu installiert, bekomme aber immer noch den gleichen Fehler.

Ich weiß, dass es ein Problem mit Android 5.0 und höher ist. Aber wie hat CppDroid bis letzte Nacht funktioniert? Kann mir jemand eine Antwort oder irgendeinen Hinweis geben?

Termux bietet nur Clang. Kann mir jemand eine Möglichkeit geben, C-Code erfolgreich zu kompilieren?

Permission denied error

enter image description here

+0

Haben Sie die Berechtigung und den Besitzer von a.out überprüft? – klutt

+0

@klutt Ich habe gerade ein anderes Bild hinzugefügt. Bitte pass auf dich auf. Ich verstehe die Erlaubnissymbole nicht. – Tangent

+0

Es sieht so aus, als müssten Sie root sein, um es auszuführen. – klutt

Antwort

1

Auch wenn der Dateimodus 0777 ist, Android erlaubt keine Dateien auf gemeinsam genutzten Speicher durch die Montage mit noexec ausgeführt werden.

Wenn Sie

/system/bin/mount | grep /storage 

laufen werden Sie so etwas wie dieses finden:

/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) 
                   ^~~~~~ 

Die tatsächliche Einhängepunkt variieren kann (/storage/sdcard0), aber es ist sicherlich mit noexec montiert.

Sie sollten die ausführbare Datei in das Home-Verzeichnis von Termux (oder irgendwo in einen ext4-Mountpoint) verschieben, bevor Sie versuchen, es auszuführen. Das macht CppDroid. Es führt nur ausführbare Dateien im internen Speicher aus, obwohl der Quellcode irgendwo gespeichert werden kann.

Wenn Sie in Termux ausführen möchten, folgen Sie diese:

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

Für die "Position unabhängig ausführbare Datei (PIE)" -Ausgabe, empfehle ich Ihnen klare Daten für CppDroid. Es verwendet GCC als Compiler, der -pie Option erfordert, um PIE ausführbar zu generieren. Wenn Sie wissen, welche Einstellungen fehlerhaft sind, können Sie auch versuchen, es selbst zu beheben.

Der von Termux bereitgestellte Clang-Compiler erzeugt PIE-Executables standardmäßig.

+0

Dann Wie kann ich meinen Code ausführen? @iBug – Tangent

+1

@Tangent Mit Clang ist nichts falsch. – iBug

+0

Es hat nicht funktioniert. Erneut zeigt denselben Fehler auch nach der Ausführung von "chmod 777 ~/a.out" – Tangent