我需要在我的应用程序中运行比操作系统中版本更新的 openssl 版本。我能够修补和 Android 源代码以编译较新的版本,然后提取共享库以在我的应用程序中使用。
然后,我能够编译并链接我的 native 代码,该代码仅需要较新版本的 openssl 中的函数与我的新共享库(较新的 openssl 的补丁有效)。
我还能够创建一些按预期工作的 jni 函数,但是一旦我添加了仅位于应用程序本地较新的 openssl 共享库中的函数,我就会收到不满意的链接错误。
我的假设是 libcrypto 和 libssl 的系统版本覆盖了/libs/armeabi/libcrypto.so 和/libs/armeabi/libssl.so 中的本地版本......如何解决此问题?
最佳答案
系统已经附带了一个名为 libcrypto
的库,并且将在您的库之前选择该库。最简单的解决方案是为您的库指定一个不同的名称,并在您的 System.loadLibrary(...)
调用中使用该名称。
更新
正如您所指出的,您将需要使用新名称重建库,而不仅仅是重命名文件。
关于Android 无法加载本地 libcrypto 未满足的链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11003111/