c++ logging boost c++11

c++ - Impulsar el problema de vinculación del registrador



logging boost (4)

Estoy escribiendo un programa que utiliza las bibliotecas Boost. No tuve problemas para vincular y usar las opciones del programa, pero parece que no puedo hacer que el registro de impulso funcione correctamente. ¿Alguien podría decirme qué me falta?

jamroot.jam

using clang : : : <compileflags>-Isrc/main/headers <compileflags>-std=c++11 <compileflags>-stdlib=libc++ <linkflags>-std=c++11 <linkflags>-stdlib=libc++ ; lib boost_program_options boost_log ; exe foghorn : [ glob src/main/cpp/*.cpp ] boost_program_options boost_log ;

Este es el error que estoy recibiendo:

"boost::log::v2s_mt_posix::record_view::public_data::destroy(boost::log::v2s_mt_posix::record_view::public_data const*)", referenced from: boost::log::v2s_mt_posix::record::reset() in main.o "boost::log::v2s_mt_posix::attribute_set::insert(boost::log::v2s_mt_posix::attribute_name, boost::log::v2s_mt_posix::attribute const&)", referenced from: boost::log::v2s_mt_posix::sources::basic_logger<char, boost::log::v2s_mt_posix::sources::severity_logger<ESeverityLevel>, boost::log::v2s_mt_posix::sources::single_thread_model>::add_attribute_unlocked(boost::log::v2s_mt_posix::attribute_name const&, boost::log::v2s_mt_posix::attribute const&) in main.o boost::log::v2s_mt_posix::aux::attribute_set_reference_proxy::operator=(boost::log::v2s_mt_posix::attribute const&) const in main.o "boost::log::v2s_mt_posix::attribute_set::attribute_set(boost::log::v2s_mt_posix::attribute_set const&)", referenced from: boost::log::v2s_mt_posix::sources::basic_logger<char, boost::log::v2s_mt_posix::sources::severity_logger<ESeverityLevel>, boost::log::v2s_mt_posix::sources::single_thread_model>::basic_logger(boost::log::v2s_mt_posix::sources::basic_logger<char, boost::log::v2s_mt_posix::sources::severity_logger<ESeverityLevel>, boost::log::v2s_mt_posix::sources::single_thread_model> const&) in main.o "boost::log::v2s_mt_posix::attribute_set::attribute_set()", referenced from: boost::log::v2s_mt_posix::sources::basic_logger<char, boost::log::v2s_mt_posix::sources::severity_logger<ESeverityLevel>, boost::log::v2s_mt_posix::sources::single_thread_model>::basic_logger() in main.o "boost::log::v2s_mt_posix::attribute_set::~attribute_set()", referenced from: boost::log::v2s_mt_posix::sources::basic_logger<char, boost::log::v2s_mt_posix::sources::severity_logger<ESeverityLevel>, boost::log::v2s_mt_posix::sources::single_thread_model>::~basic_logger() in main.o "boost::log::v2s_mt_posix::attribute_name::get_id_from_string(char const*)", referenced from: boost::log::v2s_mt_posix::attribute_name::attribute_name(char const*) in main.o "void boost::log::v2s_mt_posix::init_from_stream<char>(std::__1::basic_istream<char, std::__1::char_traits<char> >&)", referenced from: __ZL13gvLoggingInitPKc in main.o "boost::log::v2s_mt_posix::aux::this_thread::get_id()", referenced from: boost::log::v2s_mt_posix::attributes::current_thread_id::impl::dispatch(boost::log::v2s_mt_posix::type_dispatcher&) in main.o boost::log::v2s_mt_posix::attributes::current_thread_id::impl::detach_from_thread() in main.o "boost::log::v2s_mt_posix::aux::this_process::get_id()", referenced from: boost::log::v2s_mt_posix::attributes::current_process_id::current_process_id() in main.o "boost::log::v2s_mt_posix::aux::stream_provider<char>::release_compound(boost::log::v2s_mt_posix::aux::stream_provider<char>::stream_compound*)", referenced from: boost::log::v2s_mt_posix::aux::record_pump<boost::log::v2s_mt_posix::sources::severity_logger<ESeverityLevel> >::auto_release::~auto_release() in main.o "boost::log::v2s_mt_posix::aux::stream_provider<char>::allocate_compound(boost::log::v2s_mt_posix::record&)", referenced from: boost::log::v2s_mt_posix::aux::record_pump<boost::log::v2s_mt_posix::sources::severity_logger<ESeverityLevel> >::record_pump(boost::log::v2s_mt_posix::sources::severity_logger<ESeverityLevel>&, boost::log::v2s_mt_posix::record&) in main.o "boost::log::v2s_mt_posix::aux::get_process_name()", referenced from: boost::log::v2s_mt_posix::attributes::current_process_name::current_process_name() in main.o "boost::log::v2s_mt_posix::aux::once_block_sentry::commit()", referenced from: boost::log::v2s_mt_posix::aux::lazy_singleton<boost::log::v2s_mt_posix::sources::aux::logger_singleton<SLogger>, boost::shared_ptr<boost::log::v2s_mt_posix::sources::aux::logger_holder<boost::log::v2s_mt_posix::sources::severity_logger<ESeverityLevel> > > >::get() in main.o "boost::log::v2s_mt_posix::aux::once_block_sentry::rollback()", referenced from: boost::log::v2s_mt_posix::aux::once_block_sentry::~once_block_sentry() in main.o "boost::log::v2s_mt_posix::aux::default_attribute_names::severity()", referenced from: boost::log::v2s_mt_posix::sources::basic_severity_logger<boost::log::v2s_mt_posix::sources::basic_logger<char, boost::log::v2s_mt_posix::sources::severity_logger<ESeverityLevel>, boost::log::v2s_mt_posix::sources::single_thread_model>, ESeverityLevel>::basic_severity_logger() in main.o boost::log::v2s_mt_posix::sources::basic_severity_logger<boost::log::v2s_mt_posix::sources::basic_logger<char, boost::log::v2s_mt_posix::sources::severity_logger<ESeverityLevel>, boost::log::v2s_mt_posix::sources::single_thread_model>, ESeverityLevel>::basic_severity_logger(boost::log::v2s_mt_posix::sources::basic_severity_logger<boost::log::v2s_mt_posix::sources::basic_logger<char, boost::log::v2s_mt_posix::sources::severity_logger<ESeverityLevel>, boost::log::v2s_mt_posix::sources::single_thread_model>, ESeverityLevel> const&) in main.o "boost::log::v2s_mt_posix::aux::unhandled_exception_count()", referenced from: boost::log::v2s_mt_posix::aux::record_pump<boost::log::v2s_mt_posix::sources::severity_logger<ESeverityLevel> >::~record_pump() in main.o boost::log::v2s_mt_posix::aux::record_pump<boost::log::v2s_mt_posix::sources::severity_logger<ESeverityLevel> >::record_pump(boost::log::v2s_mt_posix::sources::severity_logger<ESeverityLevel>&, boost::log::v2s_mt_posix::record&) in main.o "boost::log::v2s_mt_posix::aux::attach_attribute_name_info(boost::exception&, boost::log::v2s_mt_posix::attribute_name const&)", referenced from: boost::log::v2s_mt_posix::value_extractor<ESeverityLevel, boost::log::v2s_mt_posix::fallback_to_none, tag::severity>::operator()(boost::log::v2s_mt_posix::attribute_name const&, boost::log::v2s_mt_posix::attribute_value_set const&) const in main.o "boost::log::v2s_mt_posix::core::set_filter(boost::log::v2s_mt_posix::filter const&)", referenced from: __ZL13gvLoggingInitPKc in main.o "boost::log::v2s_mt_posix::core::open_record(boost::log::v2s_mt_posix::attribute_set const&)", referenced from: boost::log::v2s_mt_posix::record boost::log::v2s_mt_posix::sources::basic_logger<char, boost::log::v2s_mt_posix::sources::severity_logger<ESeverityLevel>, boost::log::v2s_mt_posix::sources::single_thread_model>::open_record_unlocked<boost::parameter::aux::tagged_argument<boost::log::v2s_mt_posix::keywords::tag::severity, ESeverityLevel const> >(boost::parameter::aux::tagged_argument<boost::log::v2s_mt_posix::keywords::tag::severity, ESeverityLevel const> const&) in main.o "boost::log::v2s_mt_posix::core::push_record_move(boost::log::v2s_mt_posix::record&)", referenced from: boost::log::v2s_mt_posix::sources::basic_logger<char, boost::log::v2s_mt_posix::sources::severity_logger<ESeverityLevel>, boost::log::v2s_mt_posix::sources::single_thread_model>::push_record_unlocked(boost::log::v2s_mt_posix::record&&) in main.o "boost::log::v2s_mt_posix::core::add_global_attribute(boost::log::v2s_mt_posix::attribute_name const&, boost::log::v2s_mt_posix::attribute const&)", referenced from: __ZL13gvLoggingInitPKc in main.o "boost::log::v2s_mt_posix::core::get()", referenced from: __ZL13gvLoggingInitPKc in main.o boost::log::v2s_mt_posix::sources::basic_logger<char, boost::log::v2s_mt_posix::sources::severity_logger<ESeverityLevel>, boost::log::v2s_mt_posix::sources::single_thread_model>::basic_logger() in main.o boost::log::v2s_mt_posix::sources::basic_logger<char, boost::log::v2s_mt_posix::sources::severity_logger<ESeverityLevel>, boost::log::v2s_mt_posix::sources::single_thread_model>::basic_logger(boost::log::v2s_mt_posix::sources::basic_logger<char, boost::log::v2s_mt_posix::sources::severity_logger<ESeverityLevel>, boost::log::v2s_mt_posix::sources::single_thread_model> const&) in main.o "boost::log::v2s_mt_posix::sources::aux::global_storage::get_or_init(std::type_info const&, boost::shared_ptr<boost::log::v2s_mt_posix::sources::aux::logger_holder_base> (*)())", referenced from: boost::log::v2s_mt_posix::sources::aux::logger_singleton<SLogger>::init_instance() in main.o "boost::log::v2s_mt_posix::sources::aux::get_severity_level()", referenced from: boost::log::v2s_mt_posix::sources::aux::severity_level<ESeverityLevel>::set_value(ESeverityLevel) in main.o boost::log::v2s_mt_posix::sources::aux::severity_level<ESeverityLevel>::impl::dispatch(boost::log::v2s_mt_posix::type_dispatcher&) in main.o boost::log::v2s_mt_posix::sources::aux::severity_level<ESeverityLevel>::impl::detach_from_thread() in main.o "boost::log::v2s_mt_posix::sources::aux::throw_odr_violation(std::type_info const&, std::type_info const&, boost::log::v2s_mt_posix::sources::aux::logger_holder_base const&)", referenced from: boost::log::v2s_mt_posix::sources::aux::logger_singleton<SLogger>::init_instance() in main.o "boost::log::v2s_mt_posix::attribute::impl::operator delete(void*, unsigned long)", referenced from: boost::log::v2s_mt_posix::sources::aux::severity_level<ESeverityLevel>::severity_level() in main.o boost::log::v2s_mt_posix::sources::aux::severity_level<ESeverityLevel>::impl::~impl() in main.o boost::log::v2s_mt_posix::sources::aux::severity_level<ESeverityLevel>::impl::detach_from_thread() in main.o boost::log::v2s_mt_posix::attributes::attribute_value_impl<ESeverityLevel>::~attribute_value_impl() in main.o boost::log::v2s_mt_posix::attribute_value::impl::~impl() in main.o boost::log::v2s_mt_posix::attribute::impl::~impl() in main.o boost::log::v2s_mt_posix::attributes::current_thread_id::current_thread_id() in main.o ... "boost::log::v2s_mt_posix::attribute::impl::operator new(unsigned long)", referenced from: boost::log::v2s_mt_posix::sources::aux::severity_level<ESeverityLevel>::severity_level() in main.o boost::log::v2s_mt_posix::sources::aux::severity_level<ESeverityLevel>::impl::detach_from_thread() in main.o boost::log::v2s_mt_posix::attributes::current_thread_id::current_thread_id() in main.o boost::log::v2s_mt_posix::attributes::current_thread_id::impl::detach_from_thread() in main.o boost::log::v2s_mt_posix::attributes::constant<boost::log::v2s_mt_posix::aux::id<boost::log::v2s_mt_posix::aux::process> >::constant(boost::log::v2s_mt_posix::aux::id<boost::log::v2s_mt_posix::aux::process>&&) in main.o boost::log::v2s_mt_posix::attributes::constant<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::constant(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&) in main.o boost::log::v2s_mt_posix::attributes::basic_clock<boost::log::v2s_mt_posix::attributes::local_time_traits>::basic_clock() in main.o ... "boost::system::system_category()", referenced from: ___cxx_global_var_init2 in main.o "boost::system::generic_category()", referenced from: ___cxx_global_var_init in main.o ___cxx_global_var_init1 in main.o "boost::log::v2s_mt_posix::attribute_value_set::end() const", referenced from: boost::log::v2s_mt_posix::value_extractor<ESeverityLevel, boost::log::v2s_mt_posix::fallback_to_none, tag::severity>::operator()(boost::log::v2s_mt_posix::attribute_name const&, boost::log::v2s_mt_posix::attribute_value_set const&) const in main.o "boost::log::v2s_mt_posix::attribute_value_set::find(boost::log::v2s_mt_posix::attribute_name) const", referenced from: boost::log::v2s_mt_posix::value_extractor<ESeverityLevel, boost::log::v2s_mt_posix::fallback_to_none, tag::severity>::operator()(boost::log::v2s_mt_posix::attribute_name const&, boost::log::v2s_mt_posix::attribute_value_set const&) const in main.o "boost::log::v2s_mt_posix::aux::once_block_sentry::enter_once_block() const", referenced from: boost::log::v2s_mt_posix::aux::once_block_sentry::executed() const in main.o "boost::log::v2s_mt_posix::core::get_logging_enabled() const", referenced from: __ZN5boost3log12v2s_mt_posix7sources22basic_composite_loggerIcNS2_15severity_loggerI14ESeverityLevelEENS2_19single_thread_modelENS2_8featuresIJNS2_8severityIS5_EEEEEE11open_recordINS_9parameter3aux15tagged_argumentINS1_8keywords3tag8severityEKS5_EEEENS1_6recordERKT_ in main.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) "clang++" -o "bin/clang-darwin-4.2.1/debug/foghorn" "bin/clang-darwin-4.2.1/debug/src/main/cpp/complement.o" "bin/clang-darwin-4.2.1/debug/src/main/cpp/degenerate.o" "bin/clang-darwin-4.2.1/debug/src/main/cpp/fastq.o" "bin/clang-darwin-4.2.1/debug/src/main/cpp/fastq_reader.o" "bin/clang-darwin-4.2.1/debug/src/main/cpp/interleave.o" "bin/clang-darwin-4.2.1/debug/src/main/cpp/interval_reader.o" "bin/clang-darwin-4.2.1/debug/src/main/cpp/interval_reader_test_tool.o" "bin/clang-darwin-4.2.1/debug/src/main/cpp/main.o" "bin/clang-darwin-4.2.1/debug/src/main/cpp/oligo_designer.o" "bin/clang-darwin-4.2.1/debug/src/main/cpp/reference_reader.o" "bin/clang-darwin-4.2.1/debug/src/main/cpp/reference_reader_test_tool.o" "bin/clang-darwin-4.2.1/debug/src/main/cpp/sequence_utils.o" "bin/clang-darwin-4.2.1/debug/src/main/cpp/tool.o" -lboost_log -lboost_program_options -g -std=c++11 -stdlib=libc++ ...failed clang-darwin.link bin/clang-darwin-4.2.1/debug/foghorn... ...failed updating 1 target... ...updated 13 targets...


Si está utilizando cmake para administrar su impulso, simplemente no olvide tener algo como:

add_definitions(-DBOOST_LOG_DYN_LINK)

en tu CMakeLists.txt


Si estas usando

void boost::log::v2s_mt_posix::init_from_stream<char>(std::basic_istream<char, std::char_traits<char> >&)

función, entonces necesita vincular

libboost_log_setup.a


Tuve el mismo problema y, en mi caso, el problema fue que tuve un impulso compilado solo con libs dinámicas, y olvidé definir BOOST_ALL_DYN_LINK .

http://www.boost.org/doc/libs/1_54_0/libs/log/doc/html/log/rationale/namespace_mangling.html

Como prueba, intenta compilar

http://www.boost.org/doc/libs/1_54_0/libs/log/example/doc/tutorial_fmt_stream.cpp

(Se debe agregar #include <boost/log/support/date_time.hpp> , el ejemplo está roto.)

y también agrega #define BOOST_LOG_DYN_LINK

Podría compilar el ejemplo con g++ tutorial_fmt_stream.cpp -Wall -L$BOOST/lib/ -I $BOOST/include/ -pthread -lboost_system -lboost_log_setup -lboost_log -lboost_date_time -lboost_thread -lrt -lboost_filesystem


Tuve el mismo problema, que era una ruta de enlace complicada. El mensaje muestra que está intentando enlazar con las bibliotecas estáticas (.... v2s ...), pero el vinculador solo le está dando bibliotecas dinámicas (porque es estúpido).

Su compilación de Boost podría estar generando archivos .so y .a , y gcc se confunde cuando ambos están presentes.

Tuve una biblioteca construida con CMake que utiliza bibliotecas estáticas de Boost. Si vincula esta biblioteca a un programa utilizando un flujo de Makefile , el programa también debe especificar las mismas bibliotecas estáticas de Boost. Sin embargo, la opción -l para el enlazador es vaga y no es tu amigo aquí. Si creó Boost para tener salidas tanto estáticas (.a) como dinámicas (.so), entonces el vinculador elegirá los archivos dinámicos (.so) primero si solo usa la opción -l .

La solución es no usar las opciones -L y -l para encontrar las bibliotecas estáticas de Boost (ya que fallará), sino especificar las rutas completas a las bibliotecas de Boost. Por ejemplo,

gcc .... -L/opt/boost_1.55/lib -lboost_log

cambiar a

gcc .... /opt/boost_1.55/lib/libboost_log.a

Otra opción es especificar la palabra -static para gcc, pero esto requiere que todas las bibliotecas sean estáticas, lo que probablemente no funcionará si usa algo más que boost (por ejemplo, la biblioteca librt.so).