CMake non è in grado di trovare la libreria OpenSSL


119

Sto cercando di installare un software, che usa cmake per installarsi, quando do a commandlin cmake ..
mi dà il seguente errore in questo file, CMakeLists.txt -------- riga ---> find_package ( OpenSSL RICHIESTO): -

 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)

Ecco la parte del file CMakeLists.txt, in cui sta arrivando l'errore: ------

#
# 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
Ora ho installato Openssl, qui: ----

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

Ho impostato il mio .profile come: ----

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

Come risolvere questo errore?

modifica: -
Ottenere questo errore

/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'

Risposte:


304

Ho avuto lo stesso problema (openssl) e questo ha funzionato per me su Ubuntu 14.04.1 LTS. La soluzione è la stessa fino a Ubuntu 18.04 (testato).

sudo apt-get install libssl-dev

20
Questa dovrebbe essere una risposta accettata! Grazie per la soluzione!
Mirakurun

1
Funziona anche su Ubuntu 16.04 LTS.
Falko

10
Questo pacchetto si chiama openssl-develCentos 7, quindi dovresti farlosudo yum install openssl-devel
user2888798

2
Questo non funziona più; non su Ubuntu 18.04 almeno.
Astrid

5
@Astrid Sono riuscito a farlo funzionare in Ubuntu 18.04
Chau Giang

41

Se stai usando Ubuntu, esegui sudo apt install libssl-dev.


4
@Astrid ha funzionato bene per me. Quale messaggio di errore ricevi?
Bruno Alexandre Rosa,

Ha funzionato anche per me su Ubuntu 18.04 @Astrid
Shehan


21

Installa openssl dal link sottostante:
https://code.google.com/p/openssl-for-windows/downloads/list
quindi imposta le variabili di seguito:

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

Funziona come un fascino, grazie! Sono riuscito a estrarre il file zip scaricato dal link che hai citato. Dopo di che ho appena aggiunto -DOPENSSL_ROOT-DIR = "C: / Path / To / Extracted / Files".
Charlie Vieillard

5
Questo è ora molto obsoleto e probabilmente pericoloso da usare. Il sito Web di openssl contiene collegamenti a 2 siti che forniscono file binari. Questo sembra essere il problema con librerie relative alla sicurezza come questa. Tuttavia, l'impostazione dei valori in questo modo dovrebbe funzionare anche con gli altri download binari.
Spiaggiata il

Ha lavorato su Windows con-DBUILD_TESTING=OFF -DCMAKE_USE_OPENSSL=ON
Florida

16

Stesso problema e risolto sul mio centos 6.5 utilizzando il seguente comando.

yum install openssl-devel

11

sudo apt install libssl-dev funziona su Ubuntu 18.04.


2
Probabilmente potresti fornire maggiori dettagli sulla soluzione che hai trovato
XavM

9

Se puoi usare pkg-config : pkg_search_module()puoi trovare OpenSSL per te.

# 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

hai il file FindOpenSSL.cmake nel modulo cmake (percorso usr / shared.cmake-3.5 / modules) # Cerca in 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

Nota per gli utenti di Fedora 27: ho dovuto installare il openssl-develpacchetto per eseguire cmakecorrettamente il file.

sudo dnf install openssl-devel


4

Solo per divertimento, inserisci una risposta funzionante alternativa alla domanda dell'OP:

cmake -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl/ -DOPENSSL_CRYPTO_LIBRARY=/usr/local/opt/openssl/lib/

1

@ Morwenn ha ragione. Devi configurare il DIR di openssl. Prima di ciò potresti dover assicurarti di averlo. dovresti controllare se ce l'hai. prima esecuzione openssl version, quindi se ce l'hai puoi win + reseguire openssl e vinci trova la directory principale poiché potrebbe non denominarsi come openssl nel tuo sistema.

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


-1

Questo è quello che ho aggiunto nel CMakeList.txt(che ha funzionato):


# 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()
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.