Android 无法加载本地 libcrypto 未满足的链接错误

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

我需要在我的应用程序中运行比操作系统中版本更新的 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/

相关文章:

java - java中的汇编代码内联以及java中如何区分32位和64位操作系统

java - 如何使用作业对象数组? (Jni)

python - 如何列出静态链接的 python 版本中可用的所有 openssl 密码?

java - Android - OpenGL - 模拟器与实际设备

android - Google Glass Card Design for only Image

java - 房间数据库 : RecyclerView does not update after delete data in detail activity

azure - 尝试创建受密码保护的 PFX 文件导致 openssl 错误 : "

java - 如何在另一个线程中在 Canvas 上绘图?

java - 如何使用 JNI 为不可执行的 JAR 设置堆空间

c++ - UE4包装错误:OpenSSL链接问题