CMake kann OpenSSL nicht finden

Dies scheint ein häufiges Problem zu sein, aber ich kann es nicht herausfinden ...

Ich versuche, einige Bibliotheken zu kompilieren, die OpenSSL verwenden. Sie verwenden CMake und können OpenSSL nicht finden, obwohl ich einen lokalen Build von BoringSSL erstellt und OPENSSL_ROOT_DIR auf sein Installationsverzeichnis gesetzt habe.

Um das Problem einfacher zu bearbeiten, habe ich eine Test-CMakeLists.txt erstellt, hier ist sie vollständig:

cmake_minimum_required(VERSION 3.22.1)

project(test)

find_package(OpenSSL REQUIRED)

Das schlägt fehl mit:

  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)

Ich habe die OPENSSL_ROOT_DIR Umgebungsvariable auf das install Verzeichnis in meinem lokalen BoringSSL-Build gesetzt:

% echo $OPENSSL_ROOT_DIR
/Users/[...]/deps/boringssl/cmake-build-debug-arm64-v8a/install

Die Dateien sind da:

% 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

Soweit ich weiß, sucht CMake (insbesondere FindOpenSSL.cmake) nach openssl/ssl.h unter include wie folgt:

find_path(OPENSSL_INCLUDE_DIR
  NAMES
    openssl/ssl.h
  ${_OPENSSL_ROOT_HINTS_AND_PATHS}
  HINTS
    ${_OPENSSL_INCLUDEDIR}
    ${_OPENSSL_INCLUDE_DIRS}
  PATH_SUFFIXES
    include
)

Ich habe sogar FindOpenSSL.cmake gehackt, um es auszudrucken _OPENSSL_ROOT_HINTS_AND_PATHS hier ist es:

STATUS,*** Hints and paths = HINTS;/Users/[...]/deps/boringssl/cmake-build-debug-arm64-v8a/install;ENV;OPENSSL_ROOT_DIR;PATHS

Das hat bereits den richtigen Pfad und verweist außerdem auf die Umgebungsvariable OPENSSL_ROOT_DIR.

Und trotzdem bekomme ich den Fehler.

Das scheint fast magisch und auf eine schlechte Art und Weise. Irgendwelche Ideen?

Ich habe versucht, cmake 3.22.1 aus dem Android SDK und das native (MacOS) cmake 3.24.3 zu verwenden, beide Fehler treten auf die gleiche Weise auf.

Auch probiert:

set(OPENSSL_ROOT_DIR .......)

rechts CMakeLists.txt, gleicher Fehler. Magie!

Aktualisieren

Der Fehler wird verursacht durch

-DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK_ROOT}/build/cmake/android.toolchain.cmake

Wenn ich es entferne, ist der Fehler weg.

Ja, ich versuche, für Android zu kompilieren. Die Android-Toolchain vermasselt also irgendwie die Fähigkeit von CMake, OpenSSL zu finden. Ich verwende das neueste NDK, 25.1.8937393.


70
1

Antwort:

Gelöst

Eine ausführliche Beschreibung, warum dies geschieht, finden Sie hier:

Android CMake: Konnte OpenSSL NICHT finden

Das funktioniert bei mir:

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