202 votes

CMake ne peut pas trouver la bibliothèque OpenSSL

J'essaie d'installer un logiciel qui utilise cmake pour s'installer lui-même. Lorsque je lance cmake .. sur la ligne de commande, il me donne l'erreur suivante dans le fichier CMakeLists.txt sur la ligne qui dit find_package(OpenSSL REQUIRED) :

-- 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 d'où vient l'erreur :

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

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 dans mon .profile :

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 puis-je résoudre cette erreur ?

EDIT :

Maintenant, j'obtiens 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'

1voto

IAmCoder Points 1648

Sur WSL, j'ai toujours l'erreur après avoir exécuté sudo apt install libssl-dev .

Je devais courir whereis openssl et ensuite mis à jour les lignes commentées dans CMakeCache.txt :

#OPENSSL_CRYPTO_LIBRARY:FILEPATH=OPENSSL_CRYPTO_LIBRARY-NOTFOUND
OPENSSL_CRYPTO_LIBRARY:FILEPATH=/usr/bin/openssl

#OPENSSL_INCLUDE_DIR:PATH=OPENSSL_INCLUDE_DIR-NOTFOUND
OPENSSL_INCLUDE_DIR:PATH=/usr/include/openssl

1voto

Jeff Points 11

En plus de la réponse acceptée, je publie quelques informations supplémentaires qui auraient pu m'épargner deux jours de travail et une destruction complète de CMake. Ma machine fonctionne sous Ubuntu 20.04

L'installation de libssl-dev comme suggéré inclut deux bibliothèques : libssl et libcrypto. La directive find_package de mon projet cmake éliminait les erreurs de référence dans mon projet, mais elle ne pouvait toujours pas trouver les bibliothèques. C'est parce que toutes les réponses acceptées autour vous disent d'utiliser ces lignes :

find_package(OpenSSL REQUIRED)

target_link_libraries(MyExecutable OpenSSL Crypto)

Cmake recherchera les bibliothèques portant les noms libOpenSSL et libCrypto. Les deux échouent à cause de la capitalisation, et libopenssl n'existe pas car le fichier est en fait juste nommé libssl. En effet, vérifiez le contenu du paquet libssl-dev en utilisant :

apt-file list libssl-dev

Donc, dans mon cas, la solution était d'utiliser cette directive cmake à la place :

target_link_libraries(MyExecutable crypto ssl )

0voto

user15339763 Points 1

La réponse dépend en fait de l'état de votre système et du programme que vous utilisez. cmake sur. En se basant sur les deuxièmes erreurs que vous obtenez, vous pourriez avoir besoin d'un supplément openssl qui n'est pas actuellement installé sur votre système. Vous pouvez rechercher des paquets à l'aide de la fonction aptitude search commande. Je recommande de rechercher "ssl" plutôt que "openssl" car les paquets ne contiennent parfois pas le mot "open".

Une autre chose que vous pouvez faire pour vérifier quels paquets installer est de trouver si le manuel ou la documentation du produit que vous installez contient des informations sur les paquets à installer.

Comme l'indique le commentaire des autres posts, l'un de ces paquets est libssl-dev, mais votre programme peut avoir besoin d'autres paquets également.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X