- 此问题在此处已有答案**:
Android CMake: Could NOT find OpenSSL(4个答案)
20小时前关门了。
这似乎是一个常见的问题,但我不能弄清楚它...
我试图编译一些使用OpenSSL的库。它们使用CMake,但无法找到OpenSSL,即使我在本地构建了BoringSSL并将OPENSSL_ROOT_DIR设置为它的安装目录。
为了更容易地解决这个问题,我做了一个测试CMakeLists.txt,这里是完全:
cmake_minimum_required(VERSION 3.22.1)
project(test)
find_package(OpenSSL REQUIRED)
这将失败:
Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the
system variable OPENSSL_ROOT_DIR (missing: OPENSSL_CRYPTO_LIBRARY
OPENSSL_INCLUDE_DIR)
我确实将OPENSSL_ROOT_DIR
环境变量设置为本地BoringSSL构建中的install
目录:
% echo $OPENSSL_ROOT_DIR
/Users/[...]/deps/boringssl/cmake-build-debug-arm64-v8a/install
文件在那里:
% ls $OPENSSL_ROOT_DIR/include/openssl/ (main|…6)
aead.h cipher.h engine.h
....... ssl.h
% ls $OPENSSL_ROOT_DIR/lib (main|…6)
libcrypto.a libssl.a
我知道CMake(特别是FindOpenSSL.cmake)会在include
下查找openssl/ssl.h
,如下所示:
find_path(OPENSSL_INCLUDE_DIR
NAMES
openssl/ssl.h
${_OPENSSL_ROOT_HINTS_AND_PATHS}
HINTS
${_OPENSSL_INCLUDEDIR}
${_OPENSSL_INCLUDE_DIRS}
PATH_SUFFIXES
include
)
我甚至黑了FindOpenSSL.cmake来打印_OPENSSL_ROOT_HINTS_AND_PATHS
,如下所示:
STATUS,*** Hints and paths = HINTS;/Users/[...]/deps/boringssl/cmake-build-debug-arm64-v8a/install;ENV;OPENSSL_ROOT_DIR;PATHS
它已经有了正确的路径,并且引用了OPENSSL_ROOT_DIR
环境变量。
但我还是发现了错误。
这看起来很神奇,而且很糟糕,有什么想法吗?
我试过使用Android SDK中的cmake 3.22.1和本机(MacOS)的cmake 3.24.3,两者都以同样的方式出错。
还尝试:
set(OPENSSL_ROOT_DIR .......)
正确的CMakeLists.txt,同样的错误。神奇!
更新
错误的原因是
-DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK_ROOT}/build/cmake/android.toolchain.cmake
如果我删除它,错误就会消失。
是的,我正在尝试为Android编译。所以Android工具链不知何故扰乱了CMake查找OpenSSL的能力。我使用的是最新的NDK,25.1.8937393。
1条答案
按热度按时间shyt4zoc1#
这里有发生这种情况的原因的详细描述:
Android CMake: Could NOT find OpenSSL
这对我很有效: