【问题标题】:Why only static build run on Android?为什么只有静态构建在 Android 上运行?
【发布时间】:2017-07-03 00:24:02
【问题描述】:

我在不使用 Android Studio 和 NDK 的情况下为 android 构建了一些应用程序。

我注意到,如果我在没有 "-static" 参数的情况下构建它们,那么 Android 将无法运行它们。

我在任何地方都找不到记录的原因,尽管我猜这与 Android 使用 Bionic 而不是 glibc 的事实有关。

是因为 Bionic libc 需要静态构建,(与“标准 Linux”glibc 相比,它也可以处理动态构建)?如果是这样,那么文件系统中怎么会有.so文件。

谢谢。

【问题讨论】:

    标签: android android-ndk shared-libraries glibc bionic


    【解决方案1】:

    你是对的,你需要 -static 的原因是因为 Bionic 不是 100% 兼容 glibc

    您可以使用 NDK 工具链来构建您的应用程序,然后您可以删除-static

    如果您不想学习 ndk-build 系统并在 Android.mk 文件中使用 include $(BUILD_EXECUTABLE),在 NDK is well documented 中使用独立工具链。

    【讨论】:

    • 谢谢。但是,为什么 android 不能运行我的“动态”构建并且它可以运行 android.mk 动态构建,而两个构建都使用相同的 Bionic 呢? NDK中的独立工具链是什么意思,是否意味着在android studio之外构建?
    • Android studio 与此无关。您也可以在命令行上使用 NDK。独立工具链适用于常规 GNU make 文件和玩具,包括 ./configure。我相信您的“动态”构建使用 glibc,而不是仿生头文件和库。
    • 我不熟悉带有常规 makefile 的 android 独立工具链。棒极了。谢谢。
    猜你喜欢
    • 2023-03-06
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多