我一直在使用Android的OpenSSL版本1.1.1。在模块的CMake中,我将libssl
称为SHARED
和IMPORTED
并将其与模块自己的库链接。使用STATIC
lib时,编译会引发
“对stdin,stderr的未定义引用。”
现在,我选择动态并且编译是可以的,但是在运行时出现以下错误:
java.lang.UnsatisfiedLinkError:dlopen失败:未找到库“ libssl.so”。
对象在那里并且具有相关的功能定义。
使用this进行构建。目标API级别为26,并使用NDK版本19。
也许我在使用错误的选项进行构建?兼容性?还是应该降低目标版本?
答案 0 :(得分:0)
答案here可以完美地构建openssl。
当您尝试集成libssl.so
或libcrypto.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中添加它?