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) 
+0

使用此:[链接](https://*.com/questions/11896304/openssl-is-not-recognized-as-an-internal-or-external-command/44199907 #44199907)它会帮助你... –

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方式。也许有人有更好的方式去做,但唉,它当时解决了我的问题。

希望这有助于

+0

谢谢,我试过你的方法。不幸的是我收到相同的错误信息。我只将'ADD_LIBRARY'改成'add_subdirectory(库) add_library(library $ {library_srcs})' – dominik

+0

啊,我明白了。你暗示'find_package(...)'根本不起作用。在这种情况下,我必须编辑'library/CMakeLists.txt'并删除'find_package'吧? – dominik

+0

好吧,使用这种方法我建议你不需要find_package,而不是OpenSSL,因为你正在为OpenSSL手动提供数学。如果你需要其他东西,比如OpenGL – cjurjiu