Android-OpenSSL 1.1.1 UnsatisfiedLinkError

时间:2019-07-17 20:54:42

标签: android android-ndk openssl

我一直在使用Android的OpenSSL版本1.1.1。在模块的CMake中,我将libssl称为SHAREDIMPORTED并将其与模块自己的库链接。使用STATIC lib时,编译会引发

  

“对stdin,stderr的未定义引用。”

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

  

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

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

使用this进行构建。目标API级别为26,并使用NDK版本19。

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

2 个答案:

答案 0 :(得分:0)

答案here可以完美地构建openssl。

当您尝试集成libssl.solibcrypto.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将您的jniLibs指向openssl

android {
    ...

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

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

答案 1 :(得分:0)

  

目标API级别26

     

“对stdin,stderr的未定义引用。”

貌似openssl是为26构建的,但是您的应用是为23之前的版本构建的。请参见https://android.googlesource.com/platform/ndk/+/master/docs/user/common_problems.md#using-mismatched-prebuilt-libraries

下的第一个项目符号

您的minSdkVersion不能低于所有依赖项的最大值minSdkVersion

  

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

您好像没有在APK中添加它?