내 mac에서 openssl을 찾으려면 cmake에게 문제가 있습니다. 말하자면, 저는 CMake를 사용하는 아마추어인데, 저는 그것과의 친분이 매우 최근이고 가끔씩 있습니다. 즉, 저는 작은 프로젝트를 만들어서 빌드하고 실행하는 것과 같은 간단한 작업을 cmake에서 할 수 있습니다. 일부 명령 (find_library, find_package, ...)은 항상 저를 곤혹스럽게 만듭니다. cmake는 비표준 경로에서 openssl 라이브러리를 찾습니다.
나는 다운로드 및 설치하려면 openssl은 (./configure를, 확인하고 설치하게) 그리고 내가 내 프로그램에서 간단한 포함하려면 openssl에 대한 도움말을 볼 주위에 인터넷 검색을했다/옵션/OpenSSL을에 파일을 넣어했다.
하나의 검색 결과가 FindOpenSSL here (https://cmake.org/cmake/help/v3.6/module/FindOpenSSL.html) 명령을 가리 킵니다. FindOpenSSL을 사용할 때 cmake는 FindOpenSSL이 명령이 아니라고 오류를 보냈습니다.
또한 find_library 및 find_package 명령을 시도했습니다. 그러나 변수 OPENSSL_FOUND를 검사하면 여전히 정의되지 않습니다.
openssl에 대한 변수를 하드 코딩해야합니다 (또는 cmake에 -D 옵션을 전달해야합니다). 가장 좋은 방법은 무엇입니까? cmake의 참조 매뉴얼은 find_library와 find_package 사이의 진정한 차이점을 이해하지 못하거나, 다른 find_library와 find_package 사이의 차이점을 이해하지 못하기 때문에 퍼즐 조각처럼 보입니다.
내가 여기있는 유일한 사람입니까, 아니면 혼란스럽고 어려움을 겪고있는 더 많은 영혼입니까?
나에게 올바른 방향을 알려주고이 혼란에서 나를 도우려는 사람 덕분입니다. (...) 난 그냥 find_libraries 대신, find_package (OpenSSL을)를 사용, 지금
ravindranaths-MacBook-Pro:crypt_handlers ravindranath$ cat CMakeLists.txt
cmake_minimum_required (VERSION 3.5.1)
# search for CPP_HOME. If found use this as the install_root dir.
# else, use /usr/local
message (STATUS "Searching for environment var CPP_HOME ...")
if (DEFINED ENV{CPP_HOME})
message (STATUS "Found CPP_HOME: " $ENV{CPP_HOME})
set (CPP_HOME $ENV{CPP_HOME})
else()
message (STATUS "Could not find. Treating /usr/local as CPP_HOME...")
set (CPP_HOME /usr/local)
endif()
set(Boost_USE_STATIC_LIBS ON)
###########################################################
set(CMAKE_INCLUDE_PATH /usr/local/ssl/include/openssl)
set(OPENSSL_USE_STATIC_LIBS ON)
############################################################
find_package(Boost 1.45.0 COMPONENTS system)
find_package (Threads)
set (CMAKE_CXX_STANDARD 11)
include_directories(../../include)
include_directories(../../include/ext)
include_directories(../../include/ext/spdlog)
include_directories(${CPP_HOME}/externals/plog/include)
add_executable(crypt app.cpp)
link_directories(../../build/src)
target_link_libraries (crypt ${CMAKE_THREAD_LIBS_INIT})
find_library(OpenSSL_LIB libcrypto.a libssl.a)
#find_package(OpenSSL)
if (OPENSSL_FOUND)
message (STATUS "OPENSSL found")
message (STATUS "OpenSSL INclude directories:" OPENSSL_INCLUDE_DIR)
else()
message (FATAL_ERROR "OpenSSL Not found.")
endif()
include_directories(${OPENSSL_INCLUDE_DIR})
target_link_libraries(crypt ${CMAKE_DL_LIBS})
TARGET_LINK_LIBRARIES(crypt ${OPENSSL_LIBRARIES} ${LIBYAML_LIBRARIES} pthread -ldl)
#target_link_libraries(crypt /usr/local/ssl/lib/libcrypto.a /usr/local/lib/libssl.a)
target_link_libraries(crypt /usr/local/lib/libcrypto.a /usr/local/lib/libssl.a)
if(Boost_FOUND)
include_directories(${include_directories} ${Boost_INCLUDE_DIRS})
target_link_libraries(crypt nettu ${Boost_LIBRARIES})
endif()
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/dist/bin)
UPDATE :
나의 현재 CMakeLists.txt은 다음과 같습니다. 그리고, 나는 다음과 같이 cmake를 실행하고 있습니다 :
cmake -DCMAKE_BUILD_TYPE=Debug -DOPENSSL_ROOT_DIR=/opt/openssl/ -DOPENSSL_LIBRARIES=/opt/openssl/lib/ ..
cmake는 메이크를 작성하여 성공합니다. 그러나 make를 실행할 때 링커 오류가 발생합니다. 다음과 같은 실종 libssl.a에 오류 포인트 :
make[2]: *** No rule to make target `/usr/local/lib/libssl.a', needed by `examples/crypt_handlers/crypt'. Stop.
내가 이해하지 못하는 것은 make가 여전히/대신 "/ .../usr/지방/lib 디렉토리"에 libssl.a을 찾고 있다는 것입니다 opt/openssl/lib.
해결 방법?
Thx. 나는 지금 심부름을 할 수있다. 하지만 make를 실행할 때, libssl.a의 링커 오류로 인해 실패한다는 것을 알았습니다. 변수 $ {OPENSSL_LIBRARIES}을 출력하면 librypto.a 만 인쇄되므로 libssl.a가 설정되지 않습니다. 내가 여기서 뭔가를 놓치고 있니? –
문제가 해결되었습니다. CMakeLists.txt는 link_libraries에 대해/usr/local/...에 대한 하드 코드 된 경로가있는 바닥에 어딘가에 여분의 줄이있었습니다. –