【问题标题】:Missing c standard library symbols when loading NDK library on Kindle Fire在 Kindle Fire 上加载 NDK 库时缺少 c 标准库符号
【发布时间】:2015-12-30 06:50:47
【问题描述】:

我的 Android 应用有一个 NDK 库。在装有 Fire OS 4.5.5 的 Kindle Fire HD 上运行时,该应用无法加载 NDK 库,因为某些 C 标准库符号未解析,即它们似乎完全丢失:

  • rand()
  • srand()
  • signal()

这个问题不会发生在我的 Nexus 5 上,搭载的是 Android 6。

有谁知道为什么这些符号完全丢失,以及是否有官方列表中缺少这些符号?

是否还有其他“主要”Android 分支具有此类非传统 C 标准库?

更新:我正在使用 Android Studio 1.5.1 和 Gradle experimental plugin 0.4.0 编译应用程序和 NDK 库。

compileOptions.with {
    sourceCompatibility=JavaVersion.VERSION_1_7
    targetCompatibility=JavaVersion.VERSION_1_7
}

android {
    compileSdkVersion = 23
    buildToolsVersion = "23.0.2"

    defaultConfig.with {
        applicationId = "net.pol_online.hyper"
        minSdkVersion.apiLevel = 18  // Android 4.3 Jelly Bean
        targetSdkVersion.apiLevel = 23  // Android 6.0 Marshmallow
    }
}

更新:解决方案是在 Gradle 配置中进行设置,因为事实证明 minSdkVersion.apiLevel 不会影响 NDK:

android.ndk {
   platformVersion = "18"
}

【问题讨论】:

    标签: android-ndk kindle-fire gradle-experimental


    【解决方案1】:

    您确定您已针对正确的原生 API 级别构建了 NDK 库吗?如果您已针对 android-21 或更新版本构建它并在较旧的 android 版本上运行 - 特别是这些功能将失败。有关详细信息,请参阅 https://stackoverflow.com/a/27338365/3115956https://stackoverflow.com/a/27093163/3115956

    【讨论】:

    • 我将 Gradle 配置添加到我的问题中:我的目标是 android-18
    • 所以我想知道问题是否在于即使我在 Gradle 配置中将目标 API 设置为 18,这也不会以某种方式传递给 NDK 构建?
    • 我在这里问了一个单独的问题:stackoverflow.com/questions/34532233/…
    猜你喜欢
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 2020-07-21
    相关资源
    最近更新 更多