HBZ*_*HBZ 10 c android gcc android-ndk genymotion
我正在尝试构建一个简单的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
Run Code Online (Sandbox Code Playgroud)
我收到一个错误
/system/bin/sh: ./Hello: not executable: magic 7F45
Run Code Online (Sandbox Code Playgroud)
经过一番研究,我很快意识到Genymotion有x86 arch而不是ARM
第二次尝试:使用x86 Standalone ToolChain构建
首先制作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
Run Code Online (Sandbox Code Playgroud)使用工具链构建Hello
cd tmp/android-toolchain/bin
./i686-linux-android-gcc -o Hello -c hello.c
Run Code Online (Sandbox Code Playgroud)在Genymotion上运行Hello
adb push hello /data/local/tmp
adb shell
cd /data/local/tmp
./hello
/system/bin/sh: ./Hello: not executable: magic 7F45
Run Code Online (Sandbox Code Playgroud)跑uname -a在genymotion机器上.
跑file Hello在可执行文件上

所以应该是一场比赛.
仍然得到同样的错误.如果有人可以解释一下,真的很感激.
编辑1:尝试在/ data/local/tmp中运行可执行文件而不是/ sdcard /.仍然给出相同的错误.
编辑2:冉unamegenymotion系统上file的可执行文件,看它们是否匹配.
如果普通的 GCC 无法完成您的工作,您将不得不采取更困难的路线。
你需要一个跨工具链;我建议使用 Crosstool~ng 生成加拿大交叉工具链;您可以使用 NDK 的独立工具链作为起点。
| 归档时间: |
|
| 查看次数: |
872 次 |
| 最近记录: |