CMake no puede encontrar la biblioteca OpenSSL

118

Estoy intentando instalar un software, que usa cmake para instalarse, cuando doy en commandlin cmake ...
me da el siguiente error en este archivo, CMakeLists.txt -------- línea ---> find_package ( SE REQUIERE 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)

Aquí está la parte del archivo CMakeLists.txt, donde aparece el error: ------

#
# 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
Ahora he instalado Openssl, aquí: ----

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

He configurado mi .profile como: ----

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

¿Cómo solucionar este error?

editar: -
Obteniendo este error

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

Respuestas:

303

Tuve el mismo problema (openssl) y esto funcionó para mí en Ubuntu 14.04.1 LTS. La solución es la misma hasta Ubuntu 18.04 (probado).

sudo apt-get install libssl-dev
Arwen
fuente
20
¡Esta debería ser una respuesta aceptada! ¡Gracias por la solución!
Mirakurun
1
También funciona en Ubuntu 16.04 LTS.
Falko
9
Este paquete se llama openssl-develen Centos 7, por lo que lo haríasudo yum install openssl-devel
user2888798
2
Esto ya no funciona; no en Ubuntu 18.04 al menos.
Astrid
5
@Astrid Pude hacerlo funcionar en Ubuntu 18.04
Chau Giang
41

Si está usando Ubuntu, ejecute sudo apt install libssl-dev.

Ryancheung
fuente
4
@Astrid funcionó bien para mí. ¿Qué mensaje de error recibe?
Bruno Alexandre Rosa
También funcionó para mí en ubuntu 18.04 @Astrid
Shehan
29

lo arregló en macOS usando

brew install openssl
cmake -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DOPENSSL_LIBRARIES=/usr/local/opt/openssl/lib
qin
fuente
1
OPENSSL_LIBRARIESes una variable de salida, no una entrada. Ver github.com/Kitware/CMake/blob/…
Simon Warta
21

Instale openssl desde el siguiente enlace:
https://code.google.com/p/openssl-for-windows/downloads/list y
luego configure las siguientes variables:

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
appapurapu
fuente
Funciona de maravilla, ¡gracias! Pude extraer el archivo zip descargado desde el enlace que mencionaste. Después de eso, acabo de agregar -DOPENSSL_ROOT-DIR = "C: / Path / To / Extracted / Files".
Charlie Vieillard
5
Esto ahora está muy desactualizado y probablemente sea peligroso de usar. El sitio web de openssl tiene enlaces a 2 sitios que proporcionan binarios. Ese parece ser el problema con las bibliotecas relacionadas con la seguridad como esta. Sin embargo, establecer valores así debería funcionar también con las otras descargas binarias.
Varado el
Trabajó en Windows con-DBUILD_TESTING=OFF -DCMAKE_USE_OPENSSL=ON
Florida
16

Mismo problema, y ​​lo arreglé en mi centos 6.5 usando el siguiente comando.

yum install openssl-devel
xavierzhao
fuente
11

sudo apt install libssl-dev funciona en ubuntu 18.04.

puente
fuente
2
Probablemente pueda proporcionar más detalles sobre la solución que encontró
XavM
9

Si puede usar pkg-config : pkg_search_module()puede encontrar OpenSSL por usted.

# 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})
ollo
fuente
4

tiene el archivo FindOpenSSL.cmake en el módulo cmake (ruta usr / shared.cmake-3.5 / modules) # Buscar 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)
sekhar
fuente
4

Nota para los usuarios de Fedora 27: tuve que instalar el openssl-develpaquete para ejecutar cmakecorrectamente.

sudo dnf install openssl-devel

ttarczynski
fuente
4

Solo por diversión, publicaré una respuesta de trabajo alternativa para la pregunta del OP:

cmake -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl/ -DOPENSSL_CRYPTO_LIBRARY=/usr/local/opt/openssl/lib/
usuario7986267
fuente
1

@ Morwenn tiene razón. Necesita configurar el directorio openssl. Antes de eso, es posible que deba asegurarse de tenerlo. deberías comprobar si lo tienes. primero ejecute openssl version, luego, si lo tiene, puede win + rejecutar openssl y ganará encontrar el directorio principal, ya que es posible que no se nombre como openssl en su sistema.

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Shihe Zhang
fuente
-1

Esto es lo que agregué en el CMakeList.txt(que funcionó):


# 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()
Bryan Jyh Herng Chong
fuente