Comment compiler un programme C pour Genymotion (Android x86)

J'essaie de créer une application HelloWorld simple et de l'exécuter sur Genymotion. Mon système de construction est Ubuntu 14.04 64bit. J'ai Android SDK (r22.6.2) et NDK (r9d) installé.

Première tentative: Construire à l'aide de la chaîne d'outils ARM NDK pré-construite

  • Pourquoi onAttach a-t-il appelé avant la création?
  • Comment changer les styles et le visage de la police dans Android?
  • Libérer la mémoire d'une activité particulière lorsqu'elle est détruite
  • Java.lang.SecurityException:! @Too plusieurs alarmes (500) enregistrées à partir de pid 10790 uid 10206
  • Utilisez Google Maps sur n'importe quel appareil. (Sans google play)
  • RecyclerView, StaggeredGridLayoutManager Refresh Bug
  • 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 

    J'ai une erreur

     /system/bin/sh: ./Hello: not executable: magic 7F45 

    Après avoir fait des recherches, je réalise rapidement que Genymotion a une arche x86 au lieu d' ARM

    Deuxième tentative: Construire en utilisant x86 Standalone ToolChain

    1. Faites d'abord une chaîne d'outils indépendante x86

       cd $NDK/build/tools ./make-standalone-toolchain.sh --arch=x86 --platform=android-19 --install-dir=/tmp/android-toolchain --ndk-dir=../../. --system=linux-x86_64 
    2. Construisez Hello en utilisant la chaîne d'outils

       cd tmp/android-toolchain/bin ./i686-linux-android-gcc -o Hello -c hello.c 
    3. Exécutez Bonjour sur Genymotion

       adb push hello /data/local/tmp adb shell cd /data/local/tmp ./hello /system/bin/sh: ./Hello: not executable: magic 7F45 

    Ran uname -a sur la machine géniomotion. Nom du système Android Ran file Hello sur l'exécutable Bonjour Informations sur le fichier

    Donc ça devrait être un match.

    Toujours obtenir la même erreur. J'apprécierais vraiment si quelqu'un pouvait éclairer.

    Edit 1: Essayé d'exécuter l'exécutable dans / data / local / tmp à la place de / sdcard /. Encore donne la même erreur.

    Edit 2: Ran uname on genymotion system et file sur l'exécutable pour voir s'ils correspondent.

  • Afficher .gif avec android.graphics.Movie
  • Afficher les données après 10 secondes dans Android
  • Comment ouvrir Google Play Store directement depuis mon application Android?
  • Comment obtenir une barre d'outils à partir d'un fragment?
  • Comment transférer des fichiers entre des applications Android s'exécutant sur le même périphérique?
  • Jquery signalr client fonctionne, mais dans java il ne peut pas être fait pour fonctionner
  • One Solution collect form web for “Comment compiler un programme C pour Genymotion (Android x86)”

    Si le GCC ordinaire ne fait pas votre travail, vous devrez prendre le chemin le plus difficile.

    Vous avez besoin d'une chaîne d'outils croisée; Je suggère de générer une chaîne d'outils croisée canadienne en utilisant Crosstool ~ ng; Vous pouvez utiliser la chaîne d'outils autonome NDK comme point de départ.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.