2015-12-11 4 views
0

CLion 1.2, в комплекте с CMake 3.3.2 и MinGW-w64 4.8.4Повышения Link библиотеки статически с помощью CMake в CLion

Мне нужно, чтобы получить один DLL в результате строительства, что нет необходимости в каких-либо других библиотек в Работа. Но нельзя связывать библиотеки Boost статически. Я загрузил и построил Boost с соответствующим MinGW. Выход

cmake_minimum_required(VERSION 3.3) 
    project(SampleProject) 

    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 

    set(BOOST_ROOT "..\\lib\\boost_1_59_0") 

    set(Boost_USE_STATIC_LIBS ON) 
    set(BOOST_COMPONENTS_NEEDED filesystem) 

    find_package(Boost 1.59.0 REQUIRED COMPONENTS ${BOOST_COMPONENTS_NEEDED}) 
    if(NOT Boost_FOUND) 
     message(FATAL_ERROR "Could not find boost!") 
    endif() 

    include_directories(${Boost_INCLUDE_DIR}) 
    set(SOURCE_FILES main.cpp) 


    set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--kill-at -static-libgcc -static-libstdc++") 

    add_library(${CMAKE_PROJECT_NAME} SHARED ${SOURCE_FILES}) 
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}\\..\\..\\output") 

    target_link_libraries(${CMAKE_PROJECT_NAME} ${Boost_LIBRARIES}) 

Сложение: O: /SampleProject/Cpp/lib/boost_1_59_0/stage/lib/libboost_filesystem-mgw48-mt-d-1_59.a (operations.o): В функции error': O:\SampleProject\Cpp\lib\boost_1_59_0/libs/filesystem/src/operations.cpp:286: undefined reference to импульс: : system :: system_category() '

Что еще мне нужно сделать для связи с boost?

UPDATE: есть список встроенных библиотек

libboost_filesystem-mgw48-1_59.a 
    libboost_filesystem-mgw48-d-1_59.a 
    libboost_filesystem-mgw48-mt-1_59.a 
    libboost_filesystem-mgw48-mt-d-1_59.a 
    libboost_filesystem-mgw48-mt-s-1_59.a 
    libboost_filesystem-mgw48-mt-sd-1_59.a 
    libboost_filesystem-mgw48-s-1_59.a 
    libboost_filesystem-mgw48-sd-1_59.a 
    libboost_system-mgw48-1_59.a 
    libboost_system-mgw48-d-1_59.a 
    libboost_system-mgw48-mt-1_59.a 
    libboost_system-mgw48-mt-d-1_59.a 
    libboost_system-mgw48-mt-s-1_59.a 
    libboost_system-mgw48-mt-sd-1_59.a 
    libboost_system-mgw48-s-1_59.a 
    libboost_system-mgw48-sd-1_59.a 

ответ

0

Это выглядит как ошибка линкера предполагая, что вы не ссылки на Boost::system Вам нужно добавить system к BOOST_COMPONENTS_NEEDED. Измените эту строку и посмотрите, не помогает ли она

set(BOOST_COMPONENTS_NEEDED system filesystem) 
+0

К сожалению, это не поможет. Результат одинаковый, также я добавил список скомпилированных библиотек boost в исходное сообщение –

+0

Не могли бы вы вывести значение 'Boost_LIBRARIES' после того, как вы перейдете к моему предложению, чтобы узнать, что видит cmake? – Ashkan

+0

Вывод: optimizedO: /SampleProject/Cpp/lib/boost_1_59_0/stage/lib/libboost_filesystem-mgw48-mt-1_59.adbugO:/SampleProject/Cpp/lib/boost_1_59_0/stage/lib/libboost_filesystem-mgw48-mt- д-1_59.aoptimizedO: /SampleProject/Cpp/lib/boost_1_59_0/stage/lib/libboost_system-mgw48-mt-1_59.adebugO:/SampleProject/Срр/Библиотека/boost_1_59_0/стадия/Библиотека/libboost_system-mgw48-т-D- 1_59.a –

Смежные вопросы