我正在使用NDK为Android编写原生lib(mylib.so)。 Mylib.so取决于libssl.so。在原生Android应用中使用libssl.so
Android NDK doc告诉我,我不应该在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')? – fadden 2013-03-21 21:33:56
我可能会静态链接,但我不确定这是否是一种通用解决方案,例如在同一个应用程序中的两个库都需要libssl的情况下。要指定我的问题:是否安全地动态链接到system/lib/libssl.so,知道它不是一个稳定的API?有其他人尝试过吗?使用system/lib/libssl.so时是否存在缺陷或功能差距?谢谢 – user2194434 2013-04-05 13:41:29
与非公共图书馆联系并不安全。系统更新时它们可能会更改,可能会破坏您的应用程序。另一个想法是将libssl.so重命名为其他内容(libssl-mine.so)并链接到该目录;这将阻止动态链接器“聪明”并找到系统的实现。 – fadden 2013-04-05 15:58:15