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.
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)