Как скомпилировать C-программу для Genymotion (Android x86)

Я пытаюсь создать простое приложение HelloWorld и запустить его в Genymotion. Моя строительная система Ubuntu 14.04 64bit. У меня установлен Android SDK (r22.6.2) и NDK (r9d).

Первая попытка: создать с использованием предварительно созданной инструментальной привязки NDK ARM

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

Я получаю сообщение об ошибке

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

После некоторых исследований я быстро понял, что у Genymotion есть x86 арка вместо ARM

Вторая попытка: создать с помощью автономного инструментального средства x86

  • Сделать x86 одиночной toolchain первым

    cd $NDK/build/tools
    ./make-standalone-toolchain.sh --arch=x86 --platform=android-19 --install-dir=/tmp/android-toolchain --ndk-dir=../../. --system=linux-x86_64
    
  • Создайте Hello, используя toolchain

    cd tmp/android-toolchain/bin
    ./i686-linux-android-gcc -o Hello -c hello.c
    
  • Запустите Hello on 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 на машине genymotion. Название системы Android Ran file Hello в исполняемом файле Информация о файле Hello

Итак, это должно быть совпадение.

По-прежнему возникает ошибка. Было бы очень приятно, если бы кто-то мог пролить свет.

Изменить 1: Пробовал запуск исполняемого файла в /data/local/tmp вместо/sdcard/. Все еще дает ту же ошибку.

Отредактируйте 2: Ran uname в системе genymotion и file в исполняемом файле, чтобы увидеть, соответствуют ли они.

Ответ 1

Если обычный GCC не выполнит вашу работу, вам придется пройти более сложный маршрут.

Вам нужна кросс-цепочка; Я предлагаю создать канадскую кросс-цепочку с помощью Crosstool ~ ng; вы можете использовать автономную инструментальную цепочку NDK в качестве отправной точки.