gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:13:59 25 4
gpt4 key购买 nike

我正在尝试构建一个简单的 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

我得到一个错误

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

经过一些研究,我很快意识到 Genymotion 使用 x86 arch 而不是 ARM

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

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

    cd tmp/android-toolchain/bin
    ./i686-linux-android-gcc -o Hello -c hello.c
  3. 在 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 -aAndroid System Name在可执行文件上运行 file Hello Hello File info

所以应该是匹配的。

仍然出现同样的错误。如果有人能阐明一些问题,我将不胜感激。

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

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

最佳答案

如果普通的 GCC 不能完成您的工作,您将不得不采取更困难的方法。

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

关于android - 如何为 Genymotion (Android x86) 编译 C 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33302683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com