2013-04-27 5 views
41

J'essaie d'installer un logiciel, qui utilise cmake pour s'installer, quand je donne à commandlin cmake ..
il me donne l'erreur suivante dans ce fichier, CMakeLists.txt --- ----- ligne ---> find_package (OpenSSL obligatoire): -CMake impossible de trouver la bibliothèque OpenSSL

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 est arrivantes: ------

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

Je tournerai ma .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épondre

41

Il est un malentendu commun: CMake n'a pas besoin de variables d'environnement pour savoir où la bibliothèque et comprennent dir sont des variables mais CMake. Comme CMake ne trouve pas votre répertoire OpenSSL lib et include, vous devrez lui indiquer manuellement où ils se trouvent avec sa ligne de commande quand vous l'appelez. Utilisez l'option -D pour définir des constantes dans CMake à partir de la ligne de commande. Vous devrez définir les constantes OPENSSL_ROOT_DIR et OPENSSL_LIBRARIES car elles sont à l'origine de l'erreur.

cmake -DOPENSSL_ROOT_DIR=/usr/local/ssl -DOPENSSL_LIBRARIES=/usr/local/ssl/lib 
+1

un problème de plus .. comment configurer -ldl avant de lier - bibliothèque OpenSSL ----- J'ai édité l'erreur que je reçois? - libcrypto need ldl – Allan

+0

Je ne sais pas, peut-être que OPENSSL_LIBRARIES avait besoin du chemin de la bibliothèque lui-même et pas seulement du répertoire de la bibliothèque. Dans de nombreuses bibliothèques, vous devez indiquer le chemin d'accès à la bibliothèque elle-même. Cependant, je pense qu'il aurait dû s'écrouler plus tôt si c'était le cas. Je ne pense pas que je serai en mesure de vous aider plus que cela, désolé:/ – Morwenn

8

Si vous pouvez utiliser pkg-config: pkg_search_module() peut 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}) 
7

Même problème, et l'ai fixé sur mon centos 6.5 en utilisant la commande suivante.

yum install openssl-devel 
9

S'il vous plaît installer OpenSSL lien ci-dessous:
https://code.google.com/p/openssl-for-windows/downloads/list
puis définissez les variables suivantes:

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 
+0

Fonctionne comme un charme, merci! J'ai été en mesure d'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/À/Extracted/Fichiers". –

+2

Ceci est maintenant très obsolète et probablement dangereux à utiliser. Le site Web openssl contient des liens vers 2 sites fournissant 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 fonctionner avec les autres téléchargements binaires. – Beached

+0

Vous êtes l'homme avec la réponse, merci! –

94

J'ai eu le même problème (OpenSSL) et cela a fonctionné pour moi sur Ubuntu 14.04.1 LTS

sudo apt-get install libssl-dev 
+0

Super! Merci . – GutiMac

+2

Ceci devrait être accepté réponse! Merci pour la solution! – Mirakurun

+0

Fonctionne aussi sur Ubuntu 16.04 LTS. – Falko

13

le fixe sur macOS en utilisant

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

'OPENSSL_LIBRARIES' est une variable de sortie, pas une entrée. Voir https://github.com/Kitware/CMake/blob/300979e7889b34d61803675c560fe450c7404447/Modules/FindOpenSSL.cmake –

0

@Morwenn a raison. Vous devez configurer le fichier DSI openssl. Avant cela, vous devrez peut-être vous assurer que vous l'avez. vous devriez vérifier si vous l'avez. première exécution openssl version, puis si vous l'avez vous pouvez win + r exécuter openssl et vous gagnez trouver le répertoire principal car il ne peut pas nommer comme openssl dans votre système.

enter image description here

enter image description here

2

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

Remarque pour les utilisateurs de Fedora 27: J'ai dû installer le paquet openssl-devel pour exécuter le cmake avec succès.

sudo dnf install openssl-devel

0

Juste pour le plaisir après une mauvaise réponse alternative pour travailler à la question de l'OP:

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