android - Android - OpenSSL 1.1.1 UnsatisfiedLinkError
问题描述
我一直在使用带有 Android 的 OpenSSL 版本 1.1.1。在我的模块的 CMake 中,我将其libssl
称为SHARED
andIMPORTED
并将其与模块自己的库链接。当 STATIC
使用 lib 时,编译抛出
“未定义对标准输入、标准错误的引用。”
现在,我选择了动态并且编译是可以的,但是在运行时出现以下错误:
java.lang.UnsatisfiedLinkError:dlopen 失败:找不到库“libssl.so”。
该对象在那里并且具有相关的功能定义。
用它来建造。目标 API 级别 26 并使用 NDK 版本 19。
也许我正在使用错误的选项进行构建?兼容性?还是应该降低目标版本?
解决方案
这里的答案可以完美地构建openssl。
当您尝试集成libssl.so
orlibcrypto.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的父目录。
推荐阅读
- azure - CloudBlobClient 和 BlobClient 的区别
- ruby-on-rails - 每个 Rails 引擎的会话存储
- apache-kafka - Kafka 压缩在消费者端失败
- pine-script - Pine 编辑器中的编号栏
- graph - 卸载 TigerGraph 的开发者版或企业版的常见做法是什么?
- python-3.x - 有没有办法可以使用 groupby.sum 并保留其他列?
- javascript - 是否有用于查找元素悬停计数的 jQuery 函数?
- javascript - 如何计算 JavaScript 中关联数组的长度?
- javascript - 如何在 Angular 8 中模拟一个回调函数以使用 jasmine 测试一个 Promise
- python - 使用 sklearn ColumnTransformer 函数。参数有什么作用?