如何编译Genymotion的C程序(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 arch而不是ARM

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

>首先使x86 standlone工具链

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

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

冉冉Ran ame – 在genymotion机器上.

文件可执行文件你好

所以应该是一场比赛.

仍然得到相同的错误.真的很感激,如果有人可以散发光.

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

编辑2:在genymotion系统上,并在文件的可执行文件,看看他们是否匹配.

解决方法

如果纯GCC没有完成你的工作,你必须采取更难的路线.

你需要一个跨工具链;我建议使用Crosstool生成加拿大的十字工具链;您可以使用NDK的独立工具链作为起点.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...