首页 > 解决方案 > Android - OpenSSL 1.1.1 UnsatisfiedLinkError

问题描述

我一直在使用带有 Android 的 OpenSSL 版本 1.1.1。在我的模块的 CMake 中,我将其libssl称为SHAREDandIMPORTED并将其与模块自己的库链接。当 STATIC使用 lib 时,编译抛出

“未定义对标准输入、标准错误的引用。”

现在,我选择了动态并且编译是可以的,但是在运行时出现以下错误:

java.lang.UnsatisfiedLinkError:dlopen 失败:找不到库“libssl.so”。

该对象在那里并且具有相关的功能定义。

来建造。目标 API 级别 26 并使用 NDK 版本 19。

也许我正在使用错误的选项进行构建?兼容性?还是应该降低目标版本?

标签: androidandroid-ndkopenssl

解决方案


这里的答案可以完美地构建openssl。

当您尝试集成libssl.soorlibcrypto.so时,您必须按如下方式组织您的目录结构。

目录结构

openssl_android/lib/
    ├── arm64-v8a/                       <-- ARM 64bit
    │   └── libssl.so
    ├── armeabi-v7a/                     <-- ARM 32bit
    │   └── libssl.so
    ├── x86_64/                          <-- Intel 64bit
    │   └── libssl.so
    └── x86/                             <-- Intel 32bit
        └── libssl.so

更新你的 gradle 文件

将以下行添加到您的app/build.gradle文件中,让 gradle 指向jniLibsopenssl

android {
    ...

    sourceSets {
        main {
            jniLibs.srcDirs += ['<path-to-openssl>/openssl_android/lib']
        }
    }
}

注意:路径必须是 的级别openssl_android/lib,即ABI的父目录。


推荐阅读