CMake ne parvient pas à trouver la bibliothèque OpenSSL


119

J'essaie d'installer un logiciel, qui utilise cmake pour s'installer, quand je donne à commandlin cmake ..
cela me donne l'erreur suivante dans ce fichier, CMakeLists.txt -------- line ---> find_package ( OpenSSL REQUIS): -

 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)

Voici la partie du fichier CMakeLists.txt, où l'erreur se produit: ------

#
# 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
Maintenant, j'ai installé Openssl, ici: ----

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

J'ai défini mon .profile comme: ----

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

Comment résoudre cette erreur?

modifier: -
Obtenir cette erreur

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

Réponses:


304

J'ai eu le même problème (openssl) et cela a fonctionné pour moi sur Ubuntu 14.04.1 LTS. La solution est la même jusqu'à Ubuntu 18.04 (testé).

sudo apt-get install libssl-dev

20
Cela devrait être une réponse acceptée! Merci pour la solution!
Mirakurun

1
Fonctionne également sur Ubuntu 16.04 LTS.
Falko

10
Ce paquet s'appelle openssl-develCentos 7, donc vous le feriezsudo yum install openssl-devel
user2888798

2
Cela ne fonctionne plus; pas sur Ubuntu 18.04 au moins.
Astrid

5
@Astrid J'ai pu le faire fonctionner dans Ubuntu 18.04
Chau Giang le

41

Si vous utilisez Ubuntu, exécutez sudo apt install libssl-dev.


4
@Astrid cela a bien fonctionné pour moi. Quel message d'erreur obtenez-vous?
Bruno Alexandre Rosa le

J'ai aussi travaillé pour moi sur ubuntu 18.04 @Astrid
Shehan

29

corrigé sur macOS en utilisant

brew install openssl
cmake -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DOPENSSL_LIBRARIES=/usr/local/opt/openssl/lib

1
OPENSSL_LIBRARIESest une variable de sortie, pas une entrée. Voir github.com/Kitware/CMake/blob/…
Simon Warta

21

Veuillez installer openssl à partir du lien ci-dessous:
https://code.google.com/p/openssl-for-windows/downloads/list
puis définissez les variables ci-dessous:

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

Fonctionne comme un charme, merci! J'ai pu extraire le fichier zip téléchargé du lien que vous avez mentionné. Après cela, je viens d'ajouter -DOPENSSL_ROOT-DIR = "C: / Chemin / Vers / Extract / Fichiers".
Charlie Vieillard

5
C'est maintenant très obsolète et probablement dangereux à utiliser. Le site Web openssl contient des liens vers 2 sites qui fournissent des binaires. Cela semble être le problème avec les bibliothèques liées à la sécurité comme celle-ci. Cependant, la définition de ces valeurs devrait également fonctionner avec les autres téléchargements binaires.
Échoué

A travaillé sur Windows avec-DBUILD_TESTING=OFF -DCMAKE_USE_OPENSSL=ON
Florida

16

Même problème, et l'a corrigé sur mes centos 6.5 en utilisant la commande suivante.

yum install openssl-devel

11

sudo apt install libssl-dev fonctionne sur ubuntu 18.04.


2
Vous pourriez probablement fournir plus de détails sur la solution que vous avez trouvée
XavM

9

Si vous pouvez utiliser pkg-config : pkg_search_module()pouvez trouver OpenSSL pour vous.

# 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

vous avez le fichier FindOpenSSL.cmake dans le module cmake (chemin usr / shared.cmake-3.5 / modules) # Rechercher 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

Remarque pour les utilisateurs de Fedora 27: j'ai dû installer le openssl-develpackage pour exécuter le cmakeavec succès.

sudo dnf install openssl-devel


4

Juste pour le plaisir, postez une réponse de travail alternative à la question du PO:

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

1

@Morwenn a raison. Vous devez configurer le DIR openssl. Avant cela, vous devrez peut-être vous assurer que vous l'avez. vous devriez vérifier si vous l'avez. exécutez d'abord openssl version, puis si vous l'avez, vous pouvez win + rexécuter openssl et vous gagnez trouver le répertoire principal car il peut ne pas être nommé openssl dans votre système.

entrez la description de l'image ici

entrez la description de l'image ici


-1

C'est ce que j'ai ajouté dans le CMakeList.txt(qui a fonctionné):


# 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()
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.