【发布时间】:2019-01-01 23:07:18
【问题描述】:
什么会导致以下问题: 我尝试在 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 输出如下
-- 增强版本:1.64.0
-- 找到以下 Boost 库:
--日志
--系统
-- 日期时间
-- 日志设置
-- 文件系统
--线程
-- 正则表达式
-- 计时
-- atomic Boost VERSION: 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 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
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)都存在于此文件夹中。
我错过了什么?
【问题讨论】: