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'

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

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.


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


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

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

11

sudo apt install libssl-dev funktioniert auf Ubuntu 18.04.


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

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)

4

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

sudo dnf install openssl-devel


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/

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


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()
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.