使用cmake错误链接boost日志

linking boost log using cmake error

本文关键字:boost 日志 链接 错误 cmake 使用      更新时间:2023-10-16

什么会导致以下问题:我尝试使用boost::登录cmake项目。

我的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输出是以下

-增强版本:1.64.0

--找到以下Boost库:

--日志

--系统

--日期时间

--日志设置

--文件系统

--线程

--正则表达式

--计时

--原子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/libboostrongystem.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/bootsLogTest.dir/main.cpp.o:在函数"main"中:

/主页//CLionProjects/boostLogTest/main.cpp:7:对`boost::log::v2s_mt_posix::trial::logger::get(('的未定义引用

/主页//CLionProjects/boostLogTest/main.cpp:7:对`boost::log::v2s_mt_posix::trial::logger::get(('的未定义引用

/主页//CLionProjects/boostLogTest/main.cpp:8:对`boost::log::v2s_mt_posix::trial::logger::get(('的未定义引用

/主页//CLionProjects/boostLogTest/main.cpp:8:对`boost::log::v2s_mt_posix::trial::logger::get(('的未定义引用

/主页//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::trial::logger::get(('follow。。。

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

[50%]链接CXX可执行boostLogTest

//usr/bin/ld:CMakeFiles/bootsLogTest.dir/main.cpp.o:对符号"pthread_rwlock_unlock@@GLIBC_2.2.5"的未定义引用

//lib/x86_64-linux-gnu/libphread.so.0:添加符号时出错:命令行中缺少DSO

collect2:错误:ld返回1退出状态

CMakeFiles/brustLogTest.dir/build.make:103:目标"boostLogTest"的配方失败

make[3]:***[boostLogTest]错误1

CMakeFiles/Makefile2:67:目标"CMakeFiles/brustLogTest.dir/all"的配方失败

make[2]:***[CMakeFiles/bootsLogTest.dir/all]错误2

CMakeFiles/Makefile2:79:目标"CMakeFiles/brustLogTest.dir/rule"的配方失败

make[1]:***[CMakeFiles/browsLogTest.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(都存在于此文件夹中。

我错过了什么?

只需尝试添加这行

#define BOOST_LOG_DYN_LINK 1

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

如果这不起作用,试着添加这行

ADD_DEFINITIONS(-DBOOST_LOG_DYN_LINK)

到CMake文件你需要添加OpenMP包太