【发布时间】:2020-01-27 06:42:50
【问题描述】:
我正在尝试链接 OpenSSL .so 预构建文件,以便可以在我的本机 C 文件中使用它。在我的项目中,我创建了native_hello.c 文件,它工作正常,C 代码运行,但是当我尝试时
System.loadLibrary("crypto");
System.loadLibrary("ssl");
在我的 java 代码中加载 OpenSSL .so 文件,应用程序崩溃并出现错误
java.lang.UnsatisfiedLinkError: dlopen failed: library "libcrypto.so" not found
我继续反编译了我的源apk文件,果然lib文件夹中没有libcrypto.so或libssl.so文件。
我正在使用 CMake 链接本机文件:
CMakeLists.txt
cmake_minimum_required(VERSION 3.6.0)
set(distribution_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/main)
add_library(lib_crypto SHARED IMPORTED)
set_target_properties(lib_crypto PROPERTIES IMPORTED_LOCATION ${distribution_DIR}/jniLibs/${ANDROID_ABI}/lib/libcrypto.so)
# add the open ssl lib
add_library(lib_ssl SHARED IMPORTED)
set_target_properties(lib_ssl PROPERTIES IMPORTED_LOCATION ${distribution_DIR}/jniLibs/${ANDROID_ABI}/lib/libssl.so)
add_library(native-test SHARED
${distribution_DIR}/jni/native_hello.c)
target_include_directories(native-test PRIVATE ${distribution_DIR}/jniLibs/${ANDROID_ABI}/include)
target_link_libraries(native-test
lib_crypto
lib_ssl)
在相关问题中,解决方案之一是在build.gradle 中使用sourceSets,但使用以下代码sn-p 仍然缺少.so 文件:
sourceSets {
main {
// let gradle pack the shared library into apk
jniLibs.srcDirs = ['src/main/jniLibs']
}
}
我认为这个问题很简单,但我不知道如何解决它。任何帮助将不胜感激
【问题讨论】:
标签: android c cmake openssl native