首页 文章

使用cmake错误链接boost日志

提问于
浏览
2

什么可能导致以下问题:我尝试在cmake项目中使用boost :: log .

我的CMakeList.txt文件如下所示:

cmake_minimum_required(VERSION 3.10)
project(boostLogTest)
set(CMAKE_CXX_STANDARD 11)
add_executable(boostLogTest main.cpp)
ADD_DEFINITIONS(-DBOOST_LOG_DYN_LINK) #####  edit after DiCri's answer #####
find_package(Boost REQUIRED COMPONENTS log system)

if (Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIRS})

    message("Boost VERSION: ${Boost_VERSION}")
    message("Boost INCLUDE_DIRS: ${Boost_INCLUDE_DIRS}")
    message("Boost Boost_LIBRARY_DIRS: ${Boost_LIBRARY_DIRS}")
    message("Boost LIBRARIES: ${Boost_LIBRARIES}")

    TARGET_LINK_LIBRARIES(boostLogTest ${Boost_LIBRARIES})
endif ()

我的main.cpp文件如下所示:

#include <iostream>

#include <boost/log/trivial.hpp>

int main(int, char*[])
{
    BOOST_LOG_TRIVIAL(trace) << "A trace severity message";
    BOOST_LOG_TRIVIAL(debug) << "A debug severity message";
    BOOST_LOG_TRIVIAL(info) << "An informational severity message";
    BOOST_LOG_TRIVIAL(warning) << "A warning severity message";
    BOOST_LOG_TRIVIAL(error) << "An error severity message";
    BOOST_LOG_TRIVIAL(fatal) << "A fatal severity message";

    return 0;
}

我的CMake输出如下

  • Boost版本:1.64.0 - 找到以下Boost库: - log - system - date_time - log_setup - filesystem - thread - regex - chrono - atomic Boost VERSION:106400 Boost INCLUDE_DIRS :/ usr / local / include Boost Boost_LIBRARY_DIRS:/ usr / local / lib Boost LIBRARIES:/usr/local/lib/libboost_log.so;/usr/local/lib/libboost_system.so;/usr/local/lib/libboost_date_time . 所以,/usr/local/lib/libboost_log_setup.so; /usr/local/lib/libboost_filesystem.so; /usr/local/lib/libboost_thread.so; /usr/local/lib/libboost_regex.so;在/ usr /本地/lib/libboost_chrono.so;/usr/local/lib/libboost_atomic.so - 配置完成 - 生成完成 - 构建文件已写入:/home/.../CLionProjects/boostLogTest/cmake-build-debug

但在链接时我收到以下错误消息:

[50%]链接CXX可执行文件boostLogTest CMakeFiles / boostLogTest.dir / main.cpp.o:在函数main'中:/ home /.../CLionProjects / boostLogTest / main.cpp:7:未定义引用boost: :log :: v2s_mt_posix :: trivial :: logger :: get()'/ home /.../CLionProjects/boostLogTest/main.cpp:7:未定义的引用boost :: log :: v2s_mt_posix :: trivial :: logger :: get()'/ home /.../CLionProjects/boostLogTest/main.cpp:8:未定义引用boost :: log :: v2s_mt_posix :: trivial :: logger :: get()'/ home / ... / CLionProjects / boostLogTest / main.cpp:8:对$ boost :: log :: v2s_mt_posix :: trivial :: logger :: get()'/ home /.../CLionProjects/boostLogTest/main的未定义引用 . cpp:9:未定义引用boost :: log :: v2s_mt_posix :: trivial :: logger :: get()'CMakeFiles / boostLogTest.dir / main.cpp.o:/ home /.../ CLIONProjects / boostLogTest / main .cpp:9:更多未定义的引用toboost :: log :: v2s_mt_posix :: trivial :: logger :: get()'关注...

在DiCri的回答后编辑:现在我收到以下错误消息:

[50%]链接CXX可执行文件boostLogTest / usr / bin / ld:CMakeFiles / boostLogTest.dir / main.cpp.o:未定义引用符号'pthread_rwlock_unlock @@ GLIBC_2.2.5'// lib / x86_64-linux-gnu / libpthread.so.0:添加符号时出错:命令行中缺少DSO:收集错误:ld返回1退出状态CMakeFiles / boostLogTest.dir / build.make:103:目标'boostLogTest'的配方失败make [3]:** * [boostLogTest]错误1 CMakeFiles / Makefile2:67:目标'CMakeFiles / boostLogTest.dir / all'的配方失败make [2]:*** [CMakeFiles / boostLogTest.dir / all]错误2 CMakeFiles / Makefile2:79:目标'CMakeFiles / boostLogTest.dir / rule'的配方失败make [1]:*** [CMakeFiles / boostLogTest.dir / rule]错误2 Makefile:118:目标'boostLogTest'的配方失败make:*** [boostLogTest ]错误2

如果我加

set(Boost_USE_STATIC_LIBS        ON)

库的路径更改为* .a文件,如:

Boost LIBRARIES: /usr/local/lib/libboost_log.a;/usr/local/lib/libboost_system.a;...

所有列出的库(* .so和* .a)都存在于此文件夹中 .

我错过了什么?

1 回答

  • 1

    只是尝试添加此行

    #define BOOST_LOG_DYN_LINK 1
    

    作为main.cpp文件的第一行,我认为它应该工作,有人得到了同样的问题here

    如果这不起作用,请尝试添加此行

    ADD_DEFINITIONS(-DBOOST_LOG_DYN_LINK)
    

    要CMake文件您还需要添加OpenMP包

相关问题