CMake找不到OpenSSL [重复]

a14dhokn  于 2022-12-26  发布在  其他
关注(0)|答案(1)|浏览(311)
    • 此问题在此处已有答案**:

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。

shyt4zoc

shyt4zoc1#

这里有发生这种情况的原因的详细描述:
Android CMake: Could NOT find OpenSSL
这对我很有效:

list(APPEND CMAKE_FIND_ROOT_PATH "$ENV{OPENSSL_CUSTOM_ROOT_DIR}")
find_package(OpenSSL)

相关问题