it-swarm.com.ru

CMake не может найти библиотеку OpenSSL

Я пытаюсь установить программное обеспечение, которое использует cmake, чтобы установить себя, когда я даю в командной строке cmake ..
это дает мне следующую ошибку в этом файле, CMakeLists.txt -------- line ---> find_package (OpenSSL REQUIRED): -

 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)

Вот часть файла CMakeLists.txt, в которой происходит ошибка: ------

#
# 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
Теперь я установил Openssl, здесь: ----

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

Я установил свой .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

Как устранить эту ошибку?

Правка :--
Получение этой ошибки

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

Это распространенное заблуждение: CMake не нужны переменные окружения, чтобы знать, где находятся библиотека и каталог dir, кроме переменных CMake.

Поскольку CMake не может найти вашу библиотеку OpenSSL и директорию include, вам придется вручную сообщать ему, где они находятся, с помощью его командной строки при вызове. Используйте параметр -D для установки констант в CMake из командной строки. Вам нужно будет установить константы OPENSSL_ROOT_DIR и OPENSSL_LIBRARIES, так как именно они вызывают ошибку.

cmake -DOPENSSL_ROOT_DIR=/usr/local/ssl -DOPENSSL_LIBRARIES=/usr/local/ssl/lib
56
Morwenn

У меня была такая же проблема (openssl), и это работало для меня на Ubuntu 14.04.1 LTS

Sudo apt-get install libssl-dev
150
Arwen

исправил это в macOS используя

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

Пожалуйста, установите OpenSSL снизу ссылку:
https://code.google.com/p/openssl-for-windows/downloads/list
затем установите переменные ниже:

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
16
appapurapu

Если вы используете Ubuntu, запустите Sudo apt install libssl-dev.

13
ryancheung

Если вы можете использовать pkg-config: pkg_search_module() может найти OpenSSL для вас.

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

Та же проблема, и исправил ее на моем Centos 6.5 с помощью следующей команды.

yum install openssl-devel
8
xavierzhao

у вас есть файл FindOpenSSL.cmake в модуле cmake (путь usr/shared.cmake-3.5/modules) # Поиск 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
sekhar

Просто ради забавы выложите альтернативный рабочий ответ на вопрос ОП:

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

@ Морвенн прав. Вам необходимо настроить DIR openssl. Перед этим вам может потребоваться убедиться, что он у вас есть. Вы должны проверить, есть ли у вас это. сначала запустите openssl version, затем, если он у вас есть, вы можете win + r запустить openssl и вы выиграете найти основной каталог, так как он может не называться openssl в вашей системе.

enter image description here

enter image description here

1
Shihe Zhang

Примечание для пользователей Fedora 27: мне пришлось установить пакет openssl-devel для успешного запуска cmake.

Sudo dnf install openssl-devel

1
ttarczynski