【发布时间】: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