【问题标题】:NDK - Build ARMv5/ARMv7 shared libraries from static onesNDK - 从静态库构建 ARMv5/ARMv7 共享库
【发布时间】:2013-08-12 08:17:54
【问题描述】:

我有两个从指定项目构建的静态库。

ARMv5 / myLib.a
ARMv7 / myLib.a

现在,我想使用这些库并为 ARMv5 和 ARMV7 平台构建两个共享库。

有没有办法指定我想使用我的静态库的两个版本? 现在,我在我的 ANT 脚本中做了一个坏把戏,它只包含:

  1. 复制静态 ARMv5 库。
  2. 构建共享库 (ARMv5)。
  3. 删除 ARMv5 静态库并复制 ARMv7 版本。
  4. 再次构建共享库 (ARMv7)。

我知道有

"APP_ABI := armeabi armeabi-v7a" 

但是如何告诉他我想从两个独立的静态库构建而不是仅仅从一个?

问候,

【问题讨论】:

    标签: android android-ndk java-native-interface shared-libraries


    【解决方案1】:

    可能不是最好的方法,但您可以尝试在 Android.mk 中使用 if else 语句并检查 APP_ABI 值并使用相应的库。

    ifeq ($(APP_ABI), armeabi-v7a)
      LOCAL_SRC_FILES := ARMv7/myLib.a
    else
      LOCAL_SRC_FILES := ARMv5/myLib.a
    endif
    

    如果您直接链接它们,请使用 LOCAL_STATIC_LIBRARIES。当然,您的 Application.mk 应该包含您所说的行:

    APP_ABI := armeabi armeabi-v7a
    

    【讨论】:

    • 事实上,我不再有静态库,而是将所有源代码构建在 ARMv5/v7 的共享库中。但是,在构建过程中,我得到了很多“...的多重定义”。有什么想法吗?
    • 很难在不查看当前实现结构的情况下判断,但您肯定会在多个位置包含或定义一个成员。我测试了我的解决方案,如果您坚持使用静态库,它将解决您的问题。无论如何,我想您当前的问题是另一个问题。
    • 是的,我发布了另一个问题,因为它与这个完全不同 (stackoverflow.com/questions/18187853/…)。顺便谢谢你的帮助!
    猜你喜欢
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多