【问题标题】:using libssl.so in native Android app在原生 Android 应用程序中使用 libssl.so
【发布时间】:2013-03-21 09:47:30
【问题描述】:

我正在使用 NDK 为 Android 编写本机库 (mylib.so)。 Mylib.so 依赖于 libssl.so。

Android NDK 文档告诉我不应该使用 system/lib 中的 libssl.so,因为它不是稳定 API 的一部分。相反,我应该自己交叉编译 libssl 并将其添加到 NDK。

但我看到 mylib.so 会自动与 system/lib/libssl.so 链接,因为 dalvik vm(正在加载 mylib.so)已经依赖于 libssl.so。

$ readelf -d /system/bin/dalvikvm | grep Shared
 0x00000001 (NEEDED)                     Shared library: [libdvm.so]
 0x00000001 (NEEDED)                     Shared library: [libssl.so]
 0x00000001 (NEEDED)                     Shared library: [libz.so]
 0x00000001 (NEEDED)                     Shared library: [libc.so]
 0x00000001 (NEEDED)                     Shared library: [libstdc++.s
 0x00000001 (NEEDED)                     Shared library: [libm.so]

那么处理这个问题的正确方法是什么?仍然使用 system/lib/libssl.so 吗?

谢谢

【问题讨论】:

  • 您能否将 libssl 链接到 mylib.so 作为静态库 (libssl.a)?
  • 我可能可以静态链接,但我不确定这是否是一个通用解决方案,例如在同一个应用程序中的 2 个库都需要 libssl 的情况下。指定我的问题:与 system/lib/libssl.so 动态链接是否安全,知道它不是一个稳定的 API?其他人试过这个吗?使用 system/lib/libssl.so 时是否存在已知的缺陷或功能缺陷?谢谢
  • 链接到非公共图书馆是不安全的。它们可以在系统更新时更改,可能会破坏您的应用程序。另一个想法是将 libssl.so 重命名为其他名称(libssl-mine.so)并链接到它;这将阻止动态链接器“聪明”并找到系统的实现。
  • 好的,但是重命名 lib 名称并不能解决我在 VM 应用程序中加载 mylib.so 时得到重复符号的问题,因为 Dalvik VM 已经链接到系统 libssl.so。有没有办法强制动态链接器将 mylib.so 中的符号解析为 libssl-mine.so?再次感谢

标签: android android-ndk dalvik libssl


【解决方案1】:

您可以在以下站点下载它: http://www.mediafire.com/download/njyqyxu3nxm/tcpdump.zip

【讨论】:

    【解决方案2】:

    听起来问题可能出在您的 Android.mk 文件中。假设您已经成功地将所需的 libssl 版本交叉编译为 .so 文件,您将需要在 Android.mk 文件中创建一个新模块,如下所示:

    include $(CLEAR_VARS)
    LOCAL_MODULE := libssl-prebuilt
    LOCAL_SRC_FILES := libssl.so
    LOCAL_EXPORT_C_INCLUDES := /path/to/the/include/files/for/libssl.so
    include $(PREBUILT_SHARED_LIBRARY)
    

    上述模块将您本地预构建的 libssl.so 版本添加到您的本机项目中。如果在编译 mylib.so 时要链接本地版本的 libssl.so,则必须将以下条目添加到 mylib 模块中。

    LOCAL_SHARED_LIBRARIES := libssl-prebuilt 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多