Ich versuche, eine einfache HelloWorld-Anwendung zu erstellen und es auf Genymotion ausführen. Mein Bausystem ist Ubuntu 14.04 64bit. Ich habe Android SDK (r22.6.2) und NDK (r9d) installiert.Wie kompiliere ich ein C-Programm für Genymotion (Android x86)
ersten Versuch: Erstellen Sie die vorkompilierte NDK ARM Toolchain mit
TOOLCHAIN = $NDK/toolchains/arm-linux-androideabi-4.8
$TOOLCHAIN/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc --sysroot=$PLATFORM hello.c -o hello
adb push hello /sdcard/
./hello
Ich erhalte eine Fehler
/system/bin/sh: ./Hello: not executable: magic 7F45
Nach einigen Recherchen habe ich schnell erkennen Genymotion x86 Bogen hat statt ARM
Zweiter Versuch: Erstellen mit x86 Standalone-Tool Kette
Make x86 standlone Toolchain erste
cd $NDK/build/tools ./make-standalone-toolchain.sh --arch=x86 --platform=android-19 --install-dir=/tmp/android-toolchain --ndk-dir=../../. --system=linux-x86_64
Bauen Hallo
cd tmp/android-toolchain/bin ./i686-linux-android-gcc -o Hello -c hello.c
Run Hallo auf Genymotion
adb push hello /data/local/tmp adb shell cd /data/local/tmp ./hello /system/bin/sh: ./Hello: not executable: magic 7F45
Lief uname -a
auf dem Genymotion-Maschine. Ran file Hello
auf dem ausführbaren
So soll es ein Spiel sein.
Immer noch den gleichen Fehler. Würde es wirklich schätzen, wenn jemand etwas Licht abwerfen könnte.
Bearbeiten 1: Versuchte Ausführen der ausführbaren Datei in/data/local/tmp anstelle von/sdcard /. Gibt immer noch den gleichen Fehler.
Edit 2: Ran uname
auf genymotion System und file
auf die ausführbare Datei, um zu sehen, ob sie übereinstimmen.
Ich glaube, es gibt eine Verwirrung: Sie drücken 'hallo' auf'/sdcard', aber führen 'Hallo' aus'/'(Stammverzeichnis). Auf jeden Fall mountet Android die/SD-Karte und anderen externen Speicher aus Sicherheitsgründen als nicht ausführbar. Wenn Sie Ihre ausführbare Datei pushen und ausführen möchten, verwenden Sie daher ein anderes Verzeichnis. '/ data/local/tmp' ist normalerweise eine gute Wahl. –
Ich habe gerade versucht, die ausführbare Datei in/data/local/tmp auszuführen. Gibt mir immer noch den gleichen Fehler – HBZ
Haben Sie 'chmod 700/data/local/tmp/hallo' ausgeführt? –