CMake가 OpenSSL 라이브러리를 찾을 수 없음


119

cmake를 사용하여 자체 설치하는 소프트웨어를 설치하려고합니다. commandlin cmake .. 명령을
내리면 CMakeLists.txt -------- line ---> find_package ( 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)

다음은 오류가 발생하는 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'

답변:


304

나는 같은 문제 (openssl)가 있었고 이것은 Ubuntu 14.04.1 LTS에서 나를 위해 일했습니다. 솔루션은 Ubuntu 18.04까지 동일합니다 (테스트 됨).

sudo apt-get install libssl-dev

20
이것은 받아 들여진 대답이어야합니다! 해결해 주셔서 감사합니다!
Mirakurun

1
Ubuntu 16.04 LTS에서도 작동합니다.
Falko

10
이 패키지라고 openssl-devel당신이 할 것이다, 그래서를 CentOS 7sudo yum install openssl-devel
user2888798

2
이것은 더 이상 작동하지 않습니다. 적어도 우분투 18.04에는 없습니다.
Astrid

5
@Astrid 우분투 18.04에서 작동하도록 만들 수있었습니다
Chau Giang



21

아래 링크에서 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

매력처럼 작동합니다, 감사합니다! 말씀하신 링크에서 다운로드 한 zip 파일을 추출 할 수있었습니다. 그 후 -DOPENSSL_ROOT-DIR = "C : / Path / To / Extracted / Files"를 추가했습니다.
Charlie Vieillard 2015

5
이것은 현재 매우 오래되었으며 사용하기에 위험 할 수 있습니다. openssl 웹 사이트에는 바이너리를 제공하는 2 개의 사이트에 대한 링크가 있습니다. 이것이 이와 같은 보안 관련 라이브러리의 문제인 것 같습니다. 그러나 이와 같은 값을 설정하면 다른 바이너리 다운로드에서도 작동합니다.
해변에

Windows에서 작업 함-DBUILD_TESTING=OFF -DCMAKE_USE_OPENSSL=ON
Florida

16

같은 문제이며 다음 명령을 사용하여 centos 6.5에서 수정했습니다.

yum install openssl-devel

11

sudo apt install libssl-dev 우분투 18.04에서 작동합니다.


2
찾은 솔루션에 대한 자세한 내용을 제공 할 수 있습니다
XavM

9

당신이 사용할 수있는 경우 PKG-설정을 : 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})

4

cmake 모듈 (path usr / shared.cmake-3.5 / modules)에 FindOpenSSL.cmake 파일이 있습니다. # 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

Fedora 27 사용자를위한 참고 사항 : 성공적으로 openssl-devel실행 하려면 패키지를 설치해야 cmake했습니다.

sudo dnf install openssl-devel


4

재미를 위해 OP의 질문에 대한 대체 작업 답변을 게시하십시오.

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

1

@Morwenn이 맞습니다. openssl DIR을 구성해야합니다. 그 전에 당신이 그것을 가지고 있는지 확인해야 할 수도 있습니다. 가지고 있는지 확인해야합니다. 먼저 실행 openssl version한 다음 win + r실행 openssl 하면 시스템에서 openssl로 이름이 지정되지 않을 수 있으므로 코어 디렉토리를 찾을 수 있습니다.

여기에 이미지 설명 입력

여기에 이미지 설명 입력


-1

이것은 내가 CMakeList.txt(작동 한) 추가 한 것입니다 .


# 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()
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.