CMake Boost 日志错误 -> boost::log::v2s_mt_posix::aux::once_block_sentry::~once_block_sentry()

问题描述

我正在使用 C++、Boost、CMake 工具、Visual Studio Code 和 Ubuntu 开始一个新项目。 Boost 的 Ubuntu 版本目前是 1.71,它位于 /usr/local/boost。它不是我想运行的版本,因为我想使用 1.75 中的 Json 功能。不幸的是,我觉得我必须从 Ubuntu 附带的 1.71 版本的 Boost 开始,因为我无法获得 CMake 工具来找到我放在 {$workspace}/boost 中的 1.75 版本。我使用 bootstrap.sh 和 b2 直接从所有 boost 教程中规定的下载版本编译它。任何设置 $BOOST_ROOT 的尝试都被 CMake 工具完全忽略,并且出于某种原因它总是认为系统版本。我使用 .vscode/c_cpp_properties.json 获取智能感知来获取 Boost 1.75.0 没有问题。我基本上放弃了 1.75 并使用了 usr/local/boost 中的 1.71,因为我想在使用 boost:logs 方面取得进展。

所以...在 /usr/local 中切换到 Ubuntu 的 1.71 版本并遵循 boost::log 教程后,我想到了这组问题。在执行以下操作之前,我能够构建和运行我的代码

当我添加以下包含语句和方法时,我的 jsc-main.cpp 开始弹出 CMake 工具编译错误

#include <boost/log/core.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/expressions.hpp>
#include <boost/log/sinks/text_file_backend.hpp>
#include <boost/log/utility/setup/file.hpp>
#include <boost/log/utility/setup/common_attributes.hpp>
#include <boost/log/sources/severity_logger.hpp>
#include <boost/log/sources/record_ostream.hpp>

namespace logging = boost::log;
namespace src = boost::log::sources;
namespace sinks = boost::log::sinks;
namespace keywords = boost::log::keywords;

void InitLogFIle()
{
    logging::add_file_log("sample.log");
}

这是我的 CMakeLists.txt 文件内容

cmake_minimum_required(VERSION 3.0.0)
project(JANNEcore VERSION 0.1.0)

include(CTest)
enable_testing()

add_library(JANNE_CoreUtils 
    STATIC 
        JANNE_CoreUtils.hpp 
        JANNE_CoreUtils.cpp
    )

add_library(JOODA
    STATIC
        JOODA.hpp
        JOODA.cpp
        JANNE_CoreUtils.hpp
        JANNE_CoreUtils.cpp
    )
find_package(Boost 1.71 required COMPONENTS system filesystem log )

include_directories(include)

add_executable(JANNEcore jsc-main.cpp)



target_link_libraries(JANNEcore JANNE_CoreUtils JOODA pthread )
set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

此时,当我尝试使用 cmake:build off VS Code 中的命令托盘进行构建时,我已经开始生成这组看起来很疯狂的错误

[main] Building folder: JANNE 
[build] Starting build
[proc] Executing command: /usr/bin/cmake --build /home/morsa/source/repos/JANNE/build --config Debug --target all -- -j 10
[build] [ 42%] Built target JOODA
[build] [ 71%] Built target JANNE_CoreUtils
[build] [ 85%] Linking CXX executable JANNEcore
[build] /usr/bin/ld: CMakeFiles/JANNEcore.dir/jsc-main.cpp.o: in function `boost::log::v2s_mt_posix::aux::once_block_sentry::~once_block_sentry()':
[build] /usr/include/boost/log/utility/once_block.hpp:86: undefined reference to `boost::log::v2s_mt_posix::aux::once_block_sentry::rollback()'
[build] /usr/bin/ld: CMakeFiles/JANNEcore.dir/jsc-main.cpp.o: in function `boost::log::v2s_mt_posix::aux::once_block_sentry::executed() const':
[build] /usr/include/boost/log/utility/once_block.hpp:91: undefined reference to `boost::log::v2s_mt_posix::aux::once_block_sentry::enter_once_block() const'
[build] /usr/bin/ld: CMakeFiles/JANNEcore.dir/jsc-main.cpp.o: in function `boost::log::v2s_mt_posix::expressions::tag::message::get_name()':
[build] /usr/include/boost/log/expressions/message.hpp:56: undefined reference to `boost::log::v2s_mt_posix::aux::default_attribute_names::message()'
[build] /usr/bin/ld: CMakeFiles/JANNEcore.dir/jsc-main.cpp.o: in function `boost::shared_ptr<boost::log::v2s_mt_posix::sinks::synchronous_sink<boost::log::v2s_mt_posix::sinks::text_file_backend> > boost::log::v2s_mt_posix::aux::add_file_log<boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2s_mt_posix::keywords::tag::file_name,char const [11]> > >(boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2s_mt_posix::keywords::tag::file_name,char const [11]> > const&)':
[build] /usr/include/boost/log/utility/setup/file.hpp:85: undefined reference to `boost::log::v2s_mt_posix::sinks::text_file_backend::set_file_collector(boost::shared_ptr<boost::log::v2s_mt_posix::sinks::file::collector> const&)'
[build] /usr/bin/ld: /usr/include/boost/log/utility/setup/file.hpp:86: undefined reference to `boost::log::v2s_mt_posix::sinks::text_file_backend::scan_for_files(boost::log::v2s_mt_posix::sinks::file::scan_method,bool)'
[build] /usr/bin/ld: /usr/include/boost/log/utility/setup/file.hpp:98: undefined reference to `boost::log::v2s_mt_posix::core::get()'
[build] /usr/bin/ld: /usr/include/boost/log/utility/setup/file.hpp:98: undefined reference to `boost::log::v2s_mt_posix::core::add_sink(boost::shared_ptr<boost::log::v2s_mt_posix::sinks::sink> const&)'
[build] /usr/bin/ld: CMakeFiles/JANNEcore.dir/jsc-main.cpp.o: in function `void boost::log::v2s_mt_posix::sinks::text_file_backend::construct<boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2s_mt_posix::keywords::tag::file_name,char const [11]> > const&)':
[build] /usr/include/boost/log/sinks/text_file_backend.hpp:575: undefined reference to `boost::log::v2s_mt_posix::sinks::text_file_backend::construct(boost::filesystem::path const&,boost::filesystem::path const&,std::_Ios_Openmode,unsigned long,boost::log::v2s_mt_posix::aux::light_function<bool ()> const&,boost::log::v2s_mt_posix::sinks::auto_newline_mode,bool,bool)'
[build] /usr/bin/ld: CMakeFiles/JANNEcore.dir/jsc-main.cpp.o: in function `boost::thread_specific_ptr<boost::log::v2s_mt_posix::sinks::basic_formatting_sink_frontend<char>::formatting_context>::~thread_specific_ptr()':
[build] /usr/include/boost/thread/tss.hpp:61: undefined reference to `boost::detail::set_tss_data(void const*,void (*)(void (*)(void*),void*),void (*)(void*),void*,bool)'
[build] /usr/bin/ld: CMakeFiles/JANNEcore.dir/jsc-main.cpp.o: in function `boost::detail::sp_ms_deleter<boost::log::v2s_mt_posix::sinks::text_file_backend>::destroy()':
[build] /usr/include/boost/smart_ptr/make_shared_object.hpp:59: undefined reference to `boost::log::v2s_mt_posix::sinks::text_file_backend::~text_file_backend()'
[build] /usr/bin/ld: CMakeFiles/JANNEcore.dir/jsc-main.cpp.o: in function `boost::log::v2s_mt_posix::visitation_result boost::log::v2s_mt_posix::value_visitor_invoker<boost::mpl::vector2<std::__cxx11::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::__cxx11::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > >,boost::log::v2s_mt_posix::fallback_to_none>::operator()<boost::log::v2s_mt_posix::binder1st<boost::log::v2s_mt_posix::output_fun,boost::log::v2s_mt_posix::expressions::aux::stream_ref<boost::log::v2s_mt_posix::basic_formatting_ostream<char,std::allocator<char> > >&> >(boost::log::v2s_mt_posix::attribute_name const&,boost::log::v2s_mt_posix::attribute_value_set const&,boost::log::v2s_mt_posix::binder1st<boost::log::v2s_mt_posix::output_fun,std::allocator<char> > >&>) const':
[build] /usr/include/boost/log/attributes/value_visitation.hpp:182: undefined reference to `boost::log::v2s_mt_posix::attribute_value_set::find(boost::log::v2s_mt_posix::attribute_name) const'
[build] /usr/bin/ld: /usr/include/boost/log/attributes/value_visitation.hpp:183: undefined reference to `boost::log::v2s_mt_posix::attribute_value_set::end() const'
[build] /usr/bin/ld: /usr/include/boost/log/attributes/value_visitation.hpp:191: undefined reference to `boost::log::v2s_mt_posix::aux::attach_attribute_name_info(boost::exception&,boost::log::v2s_mt_posix::attribute_name const&)'
[build] /usr/bin/ld: CMakeFiles/JANNEcore.dir/jsc-main.cpp.o: in function `boost::array<std::pair<boost::typeindex::stl_type_index,void*>,2ul> const& boost::log::v2s_mt_posix::aux::type_sequence_dispatcher<boost::mpl::vector2<std::__cxx11::basic_string<char,std::allocator<wchar_t> > > >::get_dispatching_map<boost::log::v2s_mt_posix::binder1st<boost::log::v2s_mt_posix::output_fun,std::allocator<char> > >&> >()':
[build] /usr/include/boost/log/utility/type_dispatch/static_type_dispatcher.hpp:182: undefined reference to `boost::log::v2s_mt_posix::aux::once_block_sentry::commit()'
[build] /usr/bin/ld: CMakeFiles/JANNEcore.dir/jsc-main.cpp.o: in function `boost::enable_if_c<(boost::log::v2s_mt_posix::aux::is_character_type<wchar_t>::value&&boost::log::v2s_mt_posix::aux::is_character_type<char>::value)&&((sizeof (wchar_t))!=(sizeof (char))),bool>::type boost::log::v2s_mt_posix::aux::code_convert<wchar_t,char,std::allocator<char> >(wchar_t const*,std::__cxx11::basic_string<char,std::allocator<char> >&,std::locale const&)':
[build] /usr/include/boost/log/detail/code_conversion.hpp:133: undefined reference to `boost::log::v2s_mt_posix::aux::code_convert_impl(wchar_t const*,std::locale const&)'
[build] /usr/bin/ld: CMakeFiles/JANNEcore.dir/jsc-main.cpp.o: in function `void boost::log::v2s_mt_posix::sinks::basic_formatting_sink_frontend<char>::Feed_record<boost::recursive_mutex,boost::log::v2s_mt_posix::sinks::text_file_backend>(boost::log::v2s_mt_posix::record_view const&,boost::recursive_mutex&,boost::log::v2s_mt_posix::sinks::text_file_backend&)':
[build] /usr/include/boost/log/sinks/basic_sink_frontend.hpp:463: undefined reference to `boost::log::v2s_mt_posix::sinks::text_file_backend::consume(boost::log::v2s_mt_posix::record_view const&,std::allocator<char> > const&)'
[build] /usr/bin/ld: CMakeFiles/JANNEcore.dir/jsc-main.cpp.o: in function `boost::thread_specific_ptr<boost::log::v2s_mt_posix::sinks::basic_formatting_sink_frontend<char>::formatting_context>::get() const':
[build] /usr/include/boost/thread/tss.hpp:66: undefined reference to `boost::detail::get_tss_data(void const*)'
[build] /usr/bin/ld: CMakeFiles/JANNEcore.dir/jsc-main.cpp.o: in function `boost::thread_specific_ptr<boost::log::v2s_mt_posix::sinks::basic_formatting_sink_frontend<char>::formatting_context>::reset(boost::log::v2s_mt_posix::sinks::basic_formatting_sink_frontend<char>::formatting_context*)':
[build] /usr/include/boost/thread/tss.hpp:87: undefined reference to `boost::detail::set_tss_data(void const*,bool)'
[build] /usr/bin/ld: CMakeFiles/JANNEcore.dir/jsc-main.cpp.o: in function `void boost::log::v2s_mt_posix::sinks::basic_formatting_sink_frontend<char>::Feed_record<boost::log::v2s_mt_posix::aux::fake_mutex,boost::log::v2s_mt_posix::aux::fake_mutex&,std::allocator<char> > const&)'
[build] /usr/bin/ld: CMakeFiles/JANNEcore.dir/jsc-main.cpp.o: in function `void boost::log::v2s_mt_posix::sinks::basic_sink_frontend::flush_backend_impl<boost::recursive_mutex,boost::log::v2s_mt_posix::sinks::text_file_backend>(boost::recursive_mutex&,boost::log::v2s_mt_posix::sinks::text_file_backend&,mpl_::bool_<true>)':
[build] /usr/include/boost/log/sinks/basic_sink_frontend.hpp:230: undefined reference to `boost::log::v2s_mt_posix::sinks::text_file_backend::flush()'
[build] collect2: error: ld returned 1 exit status
[build] make[2]: *** [CMakeFiles/JANNEcore.dir/build.make:86: JANNEcore] Error 1
[build] make[1]: *** [CMakeFiles/Makefile2:109: CMakeFiles/JANNEcore.dir/all] Error 2
[build] make: *** [Makefile:117: all] Error 2
[build] Build finished with exit code 2
[main] Configuring folder: JANNE 
[proc] Executing command: /usr/bin/cmake --no-warn-unused-cli -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_C_COMPILER:FILEPATH=/bin/gcc-9 -DCMAKE_CXX_COMPILER:FILEPATH=/bin/g++-9 -H/home/morsa/source/repos/JANNE -B/home/morsa/source/repos/JANNE/build -G "Unix Makefiles"
[cmake] Not searching for unused variables given on the command line.
[cmake] -- Configuring done
[cmake] -- Generating done
[cmake] -- Build files have been written to: /home/morsa/source/repos/JANNE/build
[main] Configuring folder: JANNE 
[proc] Executing command: /usr/bin/cmake --no-warn-unused-cli -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_C_COMPILER:FILEPATH=/bin/gcc-9 -DCMAKE_CXX_COMPILER:FILEPATH=/bin/g++-9 -H/home/morsa/source/repos/JANNE -B/home/morsa/source/repos/JANNE/build -G "Unix Makefiles"
[cmake] Not searching for unused variables given on the command line.
[cmake] -- Configuring done
[cmake] -- Generating done
[cmake] -- Build files have been written to: /home/morsa/source/repos/JANNE/build
[main] Configuring folder: JANNE 
[proc] Executing command: /usr/bin/cmake --no-warn-unused-cli -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_C_COMPILER:FILEPATH=/bin/gcc-9 -DCMAKE_CXX_COMPILER:FILEPATH=/bin/g++-9 -H/home/morsa/source/repos/JANNE -B/home/morsa/source/repos/JANNE/build -G "Unix Makefiles"
[cmake] Not searching for unused variables given on the command line.
[cmake] -- Configuring done
[cmake] -- Generating done
[cmake] -- Build files have been written to: /home/morsa/source/repos/JANNE/build

任何帮助将不胜感激!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)