2017-09-07 23 views
-2

CMake를 사용하는 Mac의 CLion에서 CPPREST SDK를 사용하려고합니다. 거의 다 해요,하지만 난 다음 링커 오류를 해결할 수없는 것 : 나는 -lssl 및 -lcrypto을 지정하지만, 여전히이 "스레드 상태"오류가 발생했습니다Mac에서 CMake를 사용하는 CLion의 CPPREST SDK

Undefined symbols for architecture x86_64: 
    "_ERR_remove_thread_state", referenced from: 
     boost::asio::ssl::detail::openssl_init_base::do_init::~do_init() in PongRemote.cpp.o 

. 몇 가지 연구 결과에 따르면 OpenSSL에서 오는 것처럼 보입니다. CPPREST 설치에는 Homebrew를 사용했습니다.

말 그대로 단지 주에 이것을 테스트 한 기본 포함 :

project(cpprest) 
cmake_minimum_required(VERSION 3.8) 
set(CMAKE_CXX_STANDARD 14) 

# BOOST PACKAGE 
find_package(Boost REQUIRED COMPONENTS 
    atomic 
    chrono 
    date_time 
    exception 
    filesystem 
    random 
    regex 
    serialization 
    system 
    thread 
    ) 
include_directories(${Boost_INCLUDE_DIRS}) 
IF (!Boost_FOUND) 
    MESSAGE("*** ERROR *** Boost package not found") 
    RETURN() 
ENDIF() 

# Microsoft RESTful API Package (Casablanca) 
set(CPPREST_LIBRARIES "/usr/local/opt/openssl/lib") 
include_directories("/usr/local/opt/openssl/include") 

# Compile and link 
# Build the core library and executable 
include_directories(${CMAKE_SOURCE_DIR}) 
set(SOURCE_FILES 
    main.cpp 
    ) 
set(LINK_LIBRARIES 
    ${Boost_LIBRARIES} 
    ${CPPREST_LIBRARIES} 
    -lssl 
    -lcrypto 
    ) 
add_executable(${PROJECT_NAME} ${SOURCE_FILES}) 
target_link_libraries(${PROJECT_NAME} ${LINK_LIBRARIES}) 
+0

가능한 중복 (https://stackoverflow.com/questions/12573816/what-is-an-undefined-reference -unresolved-external-symbol-error-and-do-do-i-fix) – user0042

+0

나는 그것을 검사했다. 나는 문자 그대로 단지 메인을 포함하고 있습니다 : #include #include

답변

0

시간을 복용 후, 연결 문제가 CMake 때문 : CMake의와

#include <cpprest/http_client.h> 
#include <cpprest/filestream.h> 

find 명령이 제대로 작동하지 않습니다. 필자는 수동으로 OpenSSL과 RESTCPP 모두에 대해 라이브러리를 직접 가리켰으며 문제가 해결되었습니다. [I 고칠 어떻게 정의되지 않은 참조/확인되지 않은 외부 기호 오류이며 무엇?]의

Project(cpprest) 
cmake_minimum_required(VERSION 3.8) 
set(CMAKE_CXX_STANDARD 17) 

# BOOST PACKAGE 
set(Boost_USE_MULTITHREADED  ON) # Default ON 
set(Boost_USE_STATIC_LIBS  ON) # Default OFF 
set(Boost_USE_DEBUG_RUNTIME  OFF) # Default ON 
set(Boost_USE_DEBUG_PYTHON  OFF) # Default OFF 
set(Boost_USE_STLPORT   OFF) # Default OFF 
find_package(Boost REQUIRED COMPONENTS 
    atomic 
    chrono 
    date_time 
    exception 
    filesystem 
    program_options 
    random 
    regex 
    system 
    serialization 
    thread 
    ) 
IF (!Boost_FOUND) 
    MESSAGE("*** ERROR *** Boost package not found") 
    RETURN() 
ENDIF() 
include_directories(${Boost_INCLUDE_DIRS}) 
MESSAGE("Boost_INCLUDE_DIRS:\t" ${Boost_INCLUDE_DIRS}) 

# Open SSL Package 
set(OpenSSL_INCLUDE /usr/local/opt/openssl/include) 
set(OpenSSL_LIBRARIES 
    /usr/local/opt/openssl/lib/libcrypto.dylib 
    /usr/local/opt/openssl/lib/libssl.dylib) 
include_directories(${OpenSSL_INCLUDE}) 

# Microsoft RESTful API Package (Casablanca) 
set(CppREST_INCLUDE /usr/local/opt/cpprestsdk/include) 
set(CppREST_LIBRARIES /usr/local/opt/cpprestsdk/lib/libcpprest.dylib) 
include_directories(${CppREST_INCLUDE}) 

# Compile and link 
# Build the core library and executable 
set(SOURCE_FILES main.cpp) 
set(LINK_LIBRARIES 
    ${Boost_LIBRARIES} 
    ${OpenSSL_LIBRARIES} 
    ${CppREST_LIBRARIES} 
    ) 
add_executable(${PROJECT_NAME} ${SOURCE_FILES}) 
target_link_libraries(${PROJECT_NAME} ${LINK_LIBRARIES})