【问题标题】:How to compile and run a C/C++ program on the Android system如何在Android系统上编译运行C/C++程序
【发布时间】:2012-01-31 16:44:38
【问题描述】:

Q1) 我想在 android 模拟器上运行一个简单的 c 程序。我在我的机器上使用windows xp os。我已经安装了sdk, jdk, eclipse 用于android 开发并成功在AVD 上运行android 应用程序。

Q2)我只需要知道有没有办法在AVD 上运行 C 程序(没有任何 java)。在我的机器上,我安装了 arm 并使用它编译了一个 C 程序。

Q3) 我也想知道是否可以将编译后的二进制文件推送到 android 设备或AVD 并使用 android 设备的终端或AVD 运行?

【问题讨论】:

    标签: android c android-ndk


    【解决方案1】:

    您可以使用 ARM 交叉编译器编译您的 C 程序:

    arm-linux-gnueabi-gcc -static -march=armv7-a test.c -o test
    

    然后你可以将你编译好的二进制文件推送到某个地方(不要将它推送到SD卡中):

    adb push test /data/local/tmp/test
    

    【讨论】:

    • 我收到了Fatal: Kernel too old. Segmentation fault。我的 ubuntu 的内核是 3.2.0-38,而 Android 通常在 2.6.xx 上运行你知道如何强制编译器将二进制文件与旧的 glibc 静态链接吗?
    • @TranSonHai:您应该使用 Android NDK 及其 bionic 运行时库,而不是 ubuntu 工具链。
    • -march=armv7 应改为-march=armv7-a
    • 其他架构呢,比如 Intel CPU 呢?
    • 您应该使用 android ndk 工具链并为您的架构找到正确的编译器:developer.android.com/ndk/guides/standalone_toolchain.html
    【解决方案2】:

    如果您已成功安装 NDK,请从示例应用程序开始

    http://developer.android.com/sdk/ndk/overview.html#samples

    如果您对其他方法感兴趣,那么这可能会有所帮助

    http://shareprogrammingtips.blogspot.com/2018/07/cross-compile-cc-based-programs-and-run.html

    我也想知道是否可以将编译后的二进制文件推送到 android 设备或 AVD 并使用 android 设备或 AVD 的终端运行?

    在这里你可以看到NestedVM

    NestedVM 为 Java 字节码提供二进制翻译。这是通过将 GCC 编译为 MIPS 二进制文件来完成的,然后将其转换为 Java 类文件。因此,任何用 C、C++、Fortran 或 GCC 支持的任何其他语言编写的应用程序都可以在 100% 纯 Java 中运行,而无需更改源代码。


    示例: Cross compile Hello world C program and run it on android

    【讨论】:

      【解决方案3】:

      您需要下载Native Development Kit

      【讨论】:

      • 我已经完成了..但是我还没有发现任何有用的东西下一步该怎么做?
      • @user1125898 - 你是什么意思你没有找到任何有用的东西? NDK 正是为了用 C/C++ 编写本机代码。滚动到我提供的链接的底部,您将看到有关入门的部分,以及指向 NDK 讨论组的链接。
      【解决方案4】:

      如果您想直接在 Android 设备上编译和运行 Java/C/C++ 应用程序,我推荐 Google Play 的 Terminal IDE 环境。这是一个非常巧妙的包,可以直接在您的设备上开发和编译 Android APK、Java、C 和 C++。界面都是命令行和“vi”的,所以它有真正的Linux感觉。它带有 gnu C/C++ 实现。

      此外,还内置了 telnet 和 telnet 服务器应用程序,因此您可以使用 PC 和大键盘进行所有编程,但在设备上工作。不需要root权限。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-06
        • 2011-05-06
        • 2011-05-26
        • 2020-04-10
        • 1970-01-01
        • 2016-02-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多