2017-09-07 157 views
-2

我试图在使用CMake的Mac上在CLion上使用CPPREST SDK。我几乎没有,但我似乎无法解决以下链接错误:在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 

我指定-lssl和-lcrypto,但仍得到这个“线程状态”的错误。基于一些研究,它看起来像来自OpenSSL。我用Homebrew来安装CPPREST。

我有真的只是一个主要测试这一点,基本包括:

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

用的CMake的:

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-how-do-i-fix) – user0042

+0

我检查过了。我从字面上只有一个主要和包括:#包括# #包括

回答

0

服用一段时间后,连接问题是由于CMake的发现命令无法正常工作。我手动直接指向OpenSSL和RESTCPP的库,问题已修复。

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})