使用cmake错误链接Boost日志

时间:2018-07-25 07:55:35

标签: c++ logging boost cmake

什么会导致以下问题: 我尝试在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库:

     

-日志

     

-系统

     

-date_time

     

-log_setup

     

-文件系统

     

-线程

     

-正则表达式

     

-计时

     

-原子Boost版本:106400 Boost INCLUDE_DIRS:/ usr / local / include Boost Boost_LIBRARY_DIRS:/ usr / local / lib Boost

     

图书馆:   /usr/local/lib/libboost_log.so;/usr/local/lib/libboost_system.so;/usr/local/lib/libboost_date_time.so;/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/local/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: more undefined references to boost :: 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

     

collect2:错误: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 个答案:

答案 0 :(得分:1)

只需尝试添加此行

#define BOOST_LOG_DYN_LINK 1

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

如果这行不通,请尝试添加此行

ADD_DEFINITIONS(-DBOOST_LOG_DYN_LINK)

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