【问题标题】:Link boost libraries statically using CMake in CLion在 CLion 中使用 CMake 静态链接 boost 库
【发布时间】:2015-12-11 15:48:50
【问题描述】:

CLion 1.2,捆绑了 CMake 3.3.2 和 MinGW-w64 4.8.4

我需要在不需要任何其他库的构建结果中获得一个 DLL。但不能静态链接 Boost 库。我使用相应的 MinGW 引导并构建了 Boost。

    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 toboost::system::system_category()'

我还应该怎么做才能与 boost 链接?

更新:有一个已构建库的列表

    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

【问题讨论】:

    标签: c++ boost cmake clion


    【解决方案1】:

    这看起来像是一个链接器错误,表明您没有链接到 Boost::system 您需要将system 添加到BOOST_COMPONENTS_NEEDED。更改此行,看看是否有帮助

    set(BOOST_COMPONENTS_NEEDED system filesystem )
    

    【讨论】:

    • 不幸的是它没有帮助。输出是一样的,我还在原帖中添加了一个已编译的boost库列表
    • 在您更改我的建议后,您能否输出Boost_LIBRARIES 的值以查看cmake 发现了什么?
    • 按原样输出:optimizedO:/SampleProject/Cpp/lib/boost_1_59_0/stage/lib/libboost_filesystem-mgw48-mt-1_59.adebugO:/SampleProject/Cpp/lib/boost_1_59_0/stage/lib/ libboost_filesystem-mgw48-mt-d-1_59.aoptimizedO:/SampleProject/Cpp/lib/boost_1_59_0/stage/lib/libboost_system-mgw48-mt-1_59.adebugO:/SampleProject/Cpp/lib/boost_1_59_0/stage/lib/libboost_system- mgw48-mt-d-1_59.a
    • 如果您只是将所有 boost .a 文件复制到与源文件相同的文件夹中会发生什么?
    • 也没有帮助:(
    猜你喜欢
    • 2020-06-17
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    相关资源
    最近更新 更多