Компиляция boost :: log со статической связью не работает при включении init_from_settings.hpp - PullRequest
0 голосов
/ 30 ноября 2018

Я могу успешно скомпилировать следующую программу.

#include <iostream>

#include "boost/log/trivial.hpp"

int main(int, char**)
{
    BOOST_LOG_TRIVIAL(trace) << "A trace severity message";
    return EXIT_SUCCESS;
}

Со следующим CMakeFile.

cmake_minimum_required(VERSION 2.8)

project(boost_log CXX)

# we will use static libs
set(Boost_USE_STATIC_LIBS ON)

# Boost::log required Boost version >= 1.54.0 
find_package(Boost 1.54.0 REQUIRED COMPONENTS log)

find_package(Threads)

include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})

set(SRC_FILES
    src/main.cpp)

add_executable(boost_log ${SRC_FILES})
target_link_libraries(boost_log ${Boost_LIBRARIES} Threads::Threads)

Однако, если я отредактирую main.cpp и добавлю следующий фрагмент:

#include "boost/log/utility/setup.hpp"
#include "boost/log/utility/setup/from_settings.hpp"

void blah(void)
{

    boost::log::settings setts;
    boost::log::init_from_settings(setts);
}

Тогда я получу ошибки связывания:

/usr/bin/c++    -rdynamic CMakeFiles/boost_log.dir/src/main.cpp.o  -o boost_log -Wl,-Bstatic -lboost_log -lboost_date_time -lboost_log_setup -lboost_system -lboost_filesystem -lboost_thread -lboost_regex -lboost_chrono -lboost_atomic -Wl,-Bdynamic -lpthread -lpthread 
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libboost_log_setup.a(init_from_settings.o): In function `boost::log::v2s_mt_posix::(anonymous namespace)::default_syslog_sink_factory<char>::create_sink(boost::log::v2s_mt_posix::basic_settings_section<char> const&)':
(.text+0x27fa): undefined reference to `boost::log::v2s_mt_posix::sinks::syslog_backend::set_severity_mapper(boost::log::v2s_mt_posix::aux::light_function<boost::log::v2s_mt_posix::sinks::syslog::level (boost::log::v2s_mt_posix::record_view const&)> const&)'
(snipped, but the errors continue)

Почему включаетсяfrom_settings.hpp сбой ссылки?Разве это не доступно для статической ссылки?

Я пробовал и на Fedora, и на Ubuntu с одинаковым результатом.

1 Ответ

0 голосов
/ 30 ноября 2018

Вам не хватает библиотеки log_setup!

Do:

find_package(Boost 1.54.0 REQUIRED COMPONENTS log_setup log)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...