2017-01-04 142 views
0

夥計們,我在這裏遇到了一些小問題。基本上,我試圖用CMake來構建這個美好的庫https://github.com/socketio/socket.io-client-cpp使用boost庫構建socket.io C++

首先,我根據需要安裝了boost,並將其設置爲opt/local/include/boost和opt/local/lib。但問題是CMake無法找到所需的增強庫。 Configure後CMake的給我的日誌:

not define build type, set to release 
CMake Error at /Applications/CMake.app/Contents/share/cmake-3.6/Modules/FindBoost.cmake:1753 (message): 
    Unable to find the requested Boost libraries. 

    Boost version: 1.59.0 

    Boost include path: /opt/local/include 

    Could not find the following static Boost libraries: 

      boost_date_time 
      boost_random 

    Some (but not all) of the required Boost libraries were found. You may 
    need to install these additional Boost libraries. Alternatively, set 
    BOOST_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT 
    to the location of Boost. 
Call Stack (most recent call first): 
    CMakeLists.txt:23 (find_package) 

有一次,我遇到這個問題,我試圖在手中設置BOOST_LIBRARYDIR,但也不能工作。

這裏的CMake的文件與庫中去,我不成功試圖編譯:

cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR) 
PROJECT(sioclient) 

option(BUILD_SHARED_LIBS "Build the shared library" OFF) 
option(Boost_USE_STATIC_LIBS "Use Boost static version" ON) 

set(MAJOR 1) 
set(MINOR 6) 
set(PATCH 0) 

if(NOT CMAKE_BUILD_TYPE) 
MESSAGE(STATUS "not define build type, set to release") 
set(CMAKE_BUILD_TYPE Release) 
elseif(NOT (${CMAKE_BUILD_TYPE} STREQUAL "Release" OR ${CMAKE_BUILD_TYPE} STREQUAL "Debug")) 
MESSAGE(SEND_ERROR "CMAKE_BUILD_TYPE must be either Release or Debug") 
return() 
endif() 

set(BOOST_VER "1.55.0" CACHE STRING "boost version") 

set(Boost_USE_MULTITHREADED ON) 
set(Boost_USE_STATIC_RUNTIME OFF) 
find_package(Boost ${BOOST_VER} REQUIRED COMPONENTS system date_time random) 

aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src ALL_SRC) 
aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src/internal ALL_SRC) 
file(GLOB ALL_HEADERS ${CMAKE_CURRENT_LIST_DIR}/src/*.h) 
set(SIO_INCLUDEDIR ${CMAKE_CURRENT_LIST_DIR}) 

add_library(sioclient ${ALL_SRC}) 
target_include_directories(sioclient PRIVATE ${Boost_INCLUDE_DIRS} 
    ${CMAKE_CURRENT_LIST_DIR}/src 
    ${CMAKE_CURRENT_LIST_DIR}/lib/websocketpp 
    ${CMAKE_CURRENT_LIST_DIR}/lib/rapidjson/include 
) 

set_property(TARGET sioclient PROPERTY CXX_STANDARD 11) 
set_property(TARGET sioclient PROPERTY CXX_STANDARD_REQUIRED ON) 
target_link_libraries(sioclient PRIVATE ${Boost_LIBRARIES}) 
if(BUILD_SHARED_LIBS) 
set_target_properties(sioclient 
    PROPERTIES 
     SOVERSION ${MAJOR} 
     VERSION ${MAJOR}.${MINOR}.${PATCH} 
    ) 
endif() 
list(APPEND TARGET_LIBRARIES sioclient) 

find_package(OpenSSL) 
if(OPENSSL_FOUND) 
add_library(sioclient_tls ${ALL_SRC}) 
target_include_directories(sioclient_tls PRIVATE ${Boost_INCLUDE_DIRS} 
    ${CMAKE_CURRENT_LIST_DIR}/src 
    ${CMAKE_CURRENT_LIST_DIR}/lib/websocketpp 
    ${CMAKE_CURRENT_LIST_DIR}/lib/rapidjson/include 
    ${OPENSSL_INCLUDE_DIR} 
) 

set_property(TARGET sioclient_tls PROPERTY CXX_STANDARD 11) 
set_property(TARGET sioclient_tls PROPERTY CXX_STANDARD_REQUIRED ON) 
target_link_libraries(sioclient_tls PRIVATE ${Boost_LIBRARIES} ${OPENSSL_LIBRARIES}) 
target_compile_definitions(sioclient_tls PRIVATE -DSIO_TLS) 
if(BUILD_SHARED_LIBS) 
set_target_properties(sioclient_tls 
    PROPERTIES 
     SOVERSION ${MAJOR} 
     VERSION ${MAJOR}.${MINOR}.${PATCH} 
    ) 
endif() 
list(APPEND TARGET_LIBRARIES sioclient_tls) 

endif() 

install(FILES ${ALL_HEADERS} 
    DESTINATION "${CMAKE_CURRENT_LIST_DIR}/build/include" 
) 

install(TARGETS ${TARGET_LIBRARIES} 
    DESTINATION "${CMAKE_CURRENT_LIST_DIR}/build/lib/${CMAKE_BUILD_TYPE}" 
) 

install(FILES ${Boost_LIBRARIES} 
    DESTINATION "${CMAKE_CURRENT_LIST_DIR}/build/lib/${CMAKE_BUILD_TYPE}" 
) 

我在這裏感謝所有幫助,夥計們!還有一個觀察:如果我沒有錯,它試圖找到boost_random當在include文件夾中它有名字random。也許這就是問題所在?

+0

看起來你的增強安裝是不完整的('無法找到以下靜態Boost庫:')。 – nightuser

+0

確保已經靜態構建Boost庫(默認情況下可以禁用它)。 – nightuser

回答

0

我想,你還沒有建立靜態版本的Boost庫。

如果你使用Boost.Build(b2程序)內置升壓,那麼你應該link=static,shared重新編譯(運行b2 link=static,shared <other_flags>)標誌設置,使動態和靜態庫將建成。

更新:此外,該項目的自述文件說,你應該運行你的CMake與cmake -DBOOST_ROOT:STRING=/opt/local -DBOOST_VER:STRING=<your boost version> ./與指定適當的升壓版本。

+0

你好,夜鶯!好的,我會盡快給你回覆。謝謝你的建議! –