CMake kann die OpenSSL-Bibliothek nicht finden

117

Ich versuche, eine Software zu installieren, die cmake verwendet, um sich selbst zu installieren, wenn ich bei commandlin cmake gebe.
Es gibt mir folgenden Fehler in dieser Datei, CMakeLists.txt -------- Zeile ---> find_package ( OpenSSL ERFORDERLICH): -

 cmake ..
-- Could NOT find Git (missing:  GIT_EXECUTABLE) 
ZLib include dirs: /usr/include
ZLib libraries: /usr/lib/arm-linux-gnueabihf/libz.so
Compiling with SSL support
CMake Error at /usr/local/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:97 (message):
  Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the
  system variable OPENSSL_ROOT_DIR (missing: OPENSSL_LIBRARIES
  OPENSSL_INCLUDE_DIR)
Call Stack (most recent call first):
  /usr/local/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:291 (_FPHSA_FAILURE_MESSAGE)
  /usr/local/share/cmake-2.8/Modules/FindOpenSSL.cmake:313 (find_package_handle_standard_args)
  CMakeLists.txt:436 (find_package)

Hier ist der Teil der Datei CMakeLists.txt, in dem ein Fehler auftritt: ------

#
# OpenSSL
#
if (WITH_SSL)
    message("Compiling with SSL support")

    if (USE_CYASSL)
        # Use CyaSSL as OpenSSL replacement.
        # TODO: Add a find_package command for this also.
        message("CyaSSL include dir: ${CYASSL_INCLUDE_DIRS}")
        message("CyaSSL libraries: ${CYASSL_LIB}")

        # Additional to the root directory we need to include
        # the cyassl/ subdirectory which contains the OpenSSL
        # compatability layer headers.
        foreach(inc ${CYASSL_INCLUDE_DIRS})
            include_directories(${inc} ${inc}/cyassl)
        endforeach()

        list(APPEND LIB_LIST ${CYASSL_LIB})
    else()
        # TODO: Add support for STATIC also.
        find_package(OpenSSL REQUIRED)

        message("OpenSSL include dir: ${OPENSSL_INCLUDE_DIR}")
        message("OpenSSL libraries: ${OPENSSL_LIBRARIES}")

        include_directories(${OPENSSL_INCLUDE_DIR})
        list(APPEND LIB_LIST ${OPENSSL_LIBRARIES})
    endif()
endif(WITH_SSL)

http://www.opensource.apple.com/source/OpenSSL/OpenSSL-7.1/openssl/INSTALL?txt
Jetzt habe ich Openssl hier installiert: ----

ssl header is here   -- > /usr/local/ssl/include/openssl/
ssl library is here  -- > /usr/local/ssl/lib/libssl.a
                          /usr/local/ssl/lib/libcrypto.a
openssl is here      -- > /usr/local/ssl/bin

Ich habe mein .profile wie folgt eingestellt: ----

export LD_LIBRARY_PATH=/usr/local/ssl/include/openssl:/usr/lib:/usr/local/lib:/usr/lib/pkgconfig:/usr/local/include/wx-2.8/wx:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/usr/lib/pkgconfig
export OPENSSL_ROOT_DIR=/usr/local/ssl
export OPENSSL_LIBRARIES=/usr/local/ssl/lib/

PATH = /usr/local/ssl/bin:$PATH

Wie kann dieser Fehler behoben werden?

bearbeiten: -
Diesen Fehler bekommen

/usr/local/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_globallookup':
dso_dlfcn.c:(.text+0x10): undefined reference to `dlopen'
dso_dlfcn.c:(.text+0x24): undefined reference to `dlsym'
dso_dlfcn.c:(.text+0x30): undefined reference to `dlclose'
Allan
quelle

Antworten:

301

Ich hatte das gleiche Problem (openssl) und dies funktionierte für mich unter Ubuntu 14.04.1 LTS. Die Lösung ist bis Ubuntu 18.04 (getestet) dieselbe.

sudo apt-get install libssl-dev
Arwen
quelle
20
Diese Antwort sollte akzeptiert werden! Danke für die Lösung!
Mirakurun
1
Funktioniert auch unter Ubuntu 16.04 LTS.
Falko
9
Dieses Paket wird openssl-develauf Centos 7 aufgerufen, also würden Sie es tunsudo yum install openssl-devel
user2888798
2
Das funktioniert nicht mehr; Zumindest nicht unter Ubuntu 18.04.
Astrid
5
@Astrid Ich konnte es in Ubuntu 18.04
Chau Giang
41

Wenn Sie Ubuntu verwenden, führen Sie sudo apt install libssl-dev.

Ryancheung
quelle
4
@Astrid es hat gut funktioniert für mich. Welche Fehlermeldung erhalten Sie?
Bruno Alexandre Rosa
Arbeitete auch für mich am Ubuntu 18.04 @Astrid
Shehan
29

behebt es unter macOS mit

brew install openssl
cmake -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DOPENSSL_LIBRARIES=/usr/local/opt/openssl/lib
qin
quelle
1
OPENSSL_LIBRARIESist eine Ausgabevariable, keine Eingabe. Siehe github.com/Kitware/CMake/blob/…
Simon Warta
20

Bitte installieren Sie openssl über den folgenden Link:
https://code.google.com/p/openssl-for-windows/downloads/list
und legen Sie die folgenden Variablen fest:

OPENSSL_ROOT_DIR=D:/softwares/visualStudio/openssl-0.9.8k_WIN32
OPENSSL_INCLUDE_DIR=D:/softwares/visualStudio/openssl-0.9.8k_WIN32/include
OPENSSL_LIBRARIES=D:/softwares/visualStudio/openssl-0.9.8k_WIN32/lib
Appapurapu
quelle
Funktioniert wie ein Zauber, danke! Ich konnte die heruntergeladene Zip-Datei über den von Ihnen genannten Link extrahieren. Danach habe ich gerade -DOPENSSL_ROOT-DIR = "C: / Path / To / Extracted / Files" hinzugefügt.
Charlie Vieillard
5
Dies ist jetzt sehr veraltet und wahrscheinlich gefährlich zu bedienen. Die openssl-Website enthält Links zu zwei Websites, die Binärdateien bereitstellen. Das scheint das Problem mit solchen sicherheitsrelevanten Bibliotheken zu sein. Das Festlegen solcher Werte sollte jedoch auch mit den anderen binären Downloads funktionieren.
Beached
Arbeitete unter Windows mit-DBUILD_TESTING=OFF -DCMAKE_USE_OPENSSL=ON
Florida
16

Das gleiche Problem und behoben es auf meinem Centos 6.5 mit dem folgenden Befehl.

yum install openssl-devel
Xavierzhao
quelle
11

sudo apt install libssl-dev funktioniert auf Ubuntu 18.04.

Brücke
quelle
2
Sie könnten wahrscheinlich weitere Details zu der gefundenen Lösung
angeben
9

Wenn Sie pkg-config verwenden können : pkg_search_module()finden Sie OpenSSL für Sie.

# Search OpenSSL
find_package(PkgConfig REQUIRED)
pkg_search_module(OPENSSL REQUIRED openssl)

if( OPENSSL_FOUND )
    include_directories(${OPENSSL_INCLUDE_DIRS})
    message(STATUS "Using OpenSSL ${OPENSSL_VERSION}")
else()
    # Error; with REQUIRED, pkg_search_module() will throw an error by it's own
endif()

target_link_libraries(${YOUR_TARGET_HERE} ${OPENSSL_LIBRARIES})
ollo
quelle
4

Sie haben die FindOpenSSL.cmake-Datei im cmake-Modul (Pfad usr / shared.cmake-3.5 / modules) # Search OpenSSL

 find_package(OpenSSL REQUIRED) 
if( OpenSSL_FOUND )
    include_directories(${OPENSSL_INCLUDE_DIRS})
    link_directories(${OPENSSL_LIBRARIES})
    message(STATUS "Using OpenSSL ${OPENSSL_VERSION}")

target_link_libraries(project_name /path/of/libssl.so /path/of/libcrypto.so)
Sekhar
quelle
4

Hinweis für Fedora 27-Benutzer: Ich musste das openssl-develPaket installieren , um das cmakeerfolgreich auszuführen .

sudo dnf install openssl-devel

ttarczynski
quelle
3

Nur zum Spaß werde ich eine alternative Antwort auf die Frage des OP posten:

cmake -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl/ -DOPENSSL_CRYPTO_LIBRARY=/usr/local/opt/openssl/lib/
user7986267
quelle
1

@ Morwenn ist richtig. Sie müssen das openssl DIR konfigurieren. Vorher müssen Sie möglicherweise sicherstellen, dass Sie es haben. Sie sollten überprüfen, ob Sie es haben. Zuerst ausführen openssl version, dann, wenn Sie es haben, können Sie es win + rausführen openssl und Sie werden das Kernverzeichnis finden, da es in Ihrem System möglicherweise nicht als openssl bezeichnet wird.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Shihe Zhang
quelle
0

Dies ist, was ich in der CMakeList.txt(was funktioniert hat) hinzugefügt :


# https://cmake.org/cmake/help/latest/command/find_package.html
# in the above link, it states:
# "In Module mode, CMake searches for a file called Find<PackageName>.cmake. 
#  The file is first searched in the CMAKE_MODULE_PATH, then among the Find 
#  Modules provided by the CMake installation. If the file is found, it is
#  read and processed by CMake. It is responsible for finding the package,
#  checking the version, and producing any needed messages. Some find-modules
#  provide limited or no support for versioning; check the module documentation."
#
# FindOpenSSL.cmake can be found in path/to/cmake/Modules
#
# https://cmake.org/cmake/help/latest/module/FindOpenSSL.html
#

find_package(OpenSSL REQUIRED)
if (OPENSSL_FOUND)
  # Add the include directories for compiling
  target_include_directories(${PROJECT_NAME} PUBLIC ${OPENSSL_INCLUDE_DIR})

  # Add the static lib for linking
  target_link_libraries(${PROJECT_NAME} OpenSSL::SSL OpenSSL::Crypto)

  message(STATUS "Found OpenSSL ${OPENSSL_VERSION}")

else()

  message(STATUS "OpenSSL Not Found")

endif()
Bryan Jyh Herng Chong
quelle