Android CMake:找不到OpenSSL
我对Android和NDK/CMake很新颖。不过,我试图将一个本地CMake库嵌入到Android应用程序中。但是,这个库依赖于OpenSSL。Android CMake:找不到OpenSSL
这就是为什么我下载了Android的预编译版本的OpenSSL。
然而,当我尝试同步的项目,我得到以下错误:
Could NOT find OpenSSL, try to set the path to OpenSSL root folder
in the system variable OPENSSL_ROOT_DIR (missing: OPENSSL_LIBRARIES)
(found version "1.1.0f")
这里是我的(最小的)项目结构
<app-name>
-app
- src
- main
- cpp
- library
- CMakeLists.txt
CMakeLists.txt
- distribution
- openssl
- armeabi
- include
- openssl
...
- lib
libcrypto.a, libssl.a
在我的build.gradle我定义以下:
externalNativeBuild {
cmake {
path 'src/main/cpp/CMakeLists.txt'
}
}
的/app/src/main/cpp/CmakeLists.txt如下所示:
cmake_minimum_required(VERSION 3.4.1)
set(distribution_DIR ${CMAKE_SOURCE_DIR}/../../../../distribution)
set(OPENSSL_ROOT_DIR ${distribution_DIR}/openssl/${ANDROID_ABI})
set(OPENSSL_LIBRARIES "${OPENSSL_ROOT_DIR}/lib")
set(OPENSSL_INCLUDE_DIR ${OPENSSL_ROOT_DIR}/include)
message("OPENSSL_LIBRARIES ${OPENSSL_LIBRARIES}")
message("OPENSSL_INCLUDE_DIR ${OPENSSL_INCLUDE_DIR}")
find_package(OpenSSL REQUIRED)
add_subdirectory(library)
find_package(...)
搜索在几个标准位置库(读here - 搜索“的搜索结果在cmake的指定路径”)。在你的情况下,它会失败,因为它无法在你想要交叉编译Android代码的机器上找到OpenSSL。
我知道,我也对我的本地C++ Android的代码,我设法它使它工作的唯一途径链接OpenSSL的各种尝试,为以下:
SET(distribution_DIR ${CMAKE_SOURCE_DIR}/../../../../distribution)
SET(OPENSSL_ROOT_DIR ${distribution_DIR}/openssl/${ANDROID_ABI})
SET(OPENSSL_LIBRARIES_DIR "${OPENSSL_ROOT_DIR}/lib")
SET(OPENSSL_INCLUDE_DIR ${OPENSSL_ROOT_DIR}/include)
SET(OPENSSL_LIBRARIES "ssl" "crypto")
#<----Other cmake code/defines here--->
LINK_DIRECTORIES(${OPENSSL_LIBRARIES_DIR})
ADD_LIBRARY(library #your other params here#)
TARGET_INCLUDE_DIRECTORIES(library PUBLIC ${OPENSSL_INCLUDE_DIR})
TARGET_LINK_LIBRARIES(library ${OPENSSL_LIBRARIES})
我知道,我也试图使find_package可以正常工作,通过使用它的一些配置属性,如CMAKE_FIND_ROOT_PATH
等一些方法,但我无法完成。
不知道我提供的解决方案是否是最好的方法,cmake方式。也许有人有更好的方式去做,但唉,它当时解决了我的问题。
希望这有助于
谢谢,我试过你的方法。不幸的是我收到相同的错误信息。我只将'ADD_LIBRARY'改成'add_subdirectory(库) add_library(library $ {library_srcs})' – dominik
啊,我明白了。你暗示'find_package(...)'根本不起作用。在这种情况下,我必须编辑'library/CMakeLists.txt'并删除'find_package'吧? – dominik
好吧,使用这种方法我建议你不需要find_package,而不是OpenSSL,因为你正在为OpenSSL手动提供数学。如果你需要其他东西,比如OpenGL – cjurjiu
使用此:[链接](https://*.com/questions/11896304/openssl-is-not-recognized-as-an-internal-or-external-command/44199907 #44199907)它会帮助你... –