如何为Genymotion(Android x86)编译C程序

如何为Genymotion(Android x86)编译C程序,android,c,gcc,android-ndk,genymotion,Android,C,Gcc,Android Ndk,Genymotion,我正在尝试构建一个简单的HelloWorld应用程序,并在Genymotion上运行它。 我的建筑系统是Ubuntu 14.04 64位。我已经安装了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

我正在尝试构建一个简单的HelloWorld应用程序,并在Genymotion上运行它。 我的建筑系统是Ubuntu 14.04 64位。我已经安装了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
cd tmp/android-toolchain/bin
./i686-linux-android-gcc -o Hello -c hello.c
我犯了一个错误

/system/bin/sh: ./Hello: not executable: magic 7F45
在做了一些研究之后,我很快意识到Genymotion使用了x86arch而不是ARM

第二次尝试:使用x86独立工具链构建

  • 首先制作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
    
  • 使用工具链构建Hello

    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
    
    cd tmp/android-toolchain/bin
    ./i686-linux-android-gcc -o Hello -c hello.c
    
  • 在Genymotion上运行Hello

    adb push hello /data/local/tmp
    adb shell
    cd /data/local/tmp
    ./hello
    /system/bin/sh: ./Hello: not executable: magic 7F45
    
  • 在genymotion计算机上运行
    uname-a
    。 在可执行文件上运行
    文件Hello

    所以这应该是一场比赛

    仍然得到相同的错误。如果有人能透露一些情况,我会非常感激的

    编辑1:尝试在/data/local/tmp而不是/sdcard/中运行可执行文件。仍然给出相同的错误


    编辑2:在genymotion系统上运行
    uname
    ,并在可执行文件上运行
    文件
    ,查看它们是否匹配。

    如果普通GCC无法完成您的工作,您将不得不采取更艰难的路线


    你需要一个交叉工具链;我建议使用Crosstool~ng生成一个加拿大交叉工具链;您可以使用NDK的独立工具链作为起点。

    我认为存在一个混乱:您将
    hello
    推到
    /sdcard
    ,但从
    /
    根目录运行
    hello
    。无论如何,出于安全原因,Android将/SD卡和其他外部存储作为不可执行文件安装。因此,如果要推送并运行可执行文件,请使用其他目录
    /data/local/tmp
    通常是一个不错的选择。我只是尝试在/data/local/tmp中运行可执行文件。仍然给我相同的错误您是否运行了
    chmod 700/data/local/tmp/hello
    ?是的,已授予文件可执行权限。您是否尝试使用脚本?