如何为Genymotion(Android x86)编译C程序
我正在尝试构建一个简单的HelloWorld应用程序,并在Genymotion上运行它。 我的建筑系统是Ubuntu 14.04 64位。我已经安装了Android SDK(r22.6.2)和NDK(r9d) 第一次尝试:使用预先构建的NDK ARM工具链进行构建如何为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
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独立工具链构建
cd $NDK/build/tools
./make-standalone-toolchain.sh --arch=x86 --platform=android-19 --install-dir=/tmp/android-toolchain --ndk-dir=../../. --system=linux-x86_64
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
adb push hello /data/local/tmp
adb shell
cd /data/local/tmp
./hello
/system/bin/sh: ./Hello: not executable: magic 7F45
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
?是的,已授予文件可执行权限。您是否尝试使用脚本?