Android - OpenSSL 1.1.1 UnsatisfiedLinkError
Android - OpenSSL 1.1.1 UnsatisfiedLinkError
我一直在使用 Android 的 OpenSSL 1.1.1 版。在我模块的 CMake 中,我将 libssl
称为 SHARED
和 IMPORTED
并将其与模块自己的库链接。当使用 STATIC
lib 时编译抛出
"Undefined reference to stdin, stderr."
现在,我选择动态并且编译没问题,但在运行时出现以下错误:
java.lang.UnsatisfiedLinkError: dlopen failed: library "libssl.so" not found.
对象存在,并且有相关的函数定义。
正在使用 进行构建。目标 API 级别 26 并使用 NDK 版本 19。
也许我在构建时使用了错误的选项?兼容性?还是应该降低目标版本?
答案可以完美构建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
的级别,即 ABIs 的父目录。
Target API level 26
"Undefined reference to 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 failed: library "libssl.so" not found.
您似乎没有将其包含在您的 APK 中?
我一直在使用 Android 的 OpenSSL 1.1.1 版。在我模块的 CMake 中,我将 libssl
称为 SHARED
和 IMPORTED
并将其与模块自己的库链接。当使用 STATIC
lib 时编译抛出
"Undefined reference to stdin, stderr."
现在,我选择动态并且编译没问题,但在运行时出现以下错误:
java.lang.UnsatisfiedLinkError: dlopen failed: library "libssl.so" not found.
对象存在,并且有相关的函数定义。
正在使用
也许我在构建时使用了错误的选项?兼容性?还是应该降低目标版本?
答案
当您尝试集成 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
的级别,即 ABIs 的父目录。
Target API level 26
"Undefined reference to 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 failed: library "libssl.so" not found.
您似乎没有将其包含在您的 APK 中?