2017-09-24 92 views
1

我试图编译程序,它在Ubuntu上使用Boost库和我得到的错误:链接错误,同时连接升压日志(未定义的引用,以提高::登录:: v2_mt_posix ::汇)

[email protected]:~/dev$ g++ -std=c++11 -Wall -pedantic -g -O0 -DBOOST_LOG_DYN_LINK -c test.cpp 
[email protected]:~/dev$ g++ test.o -lboost_log -lboost_thread -lpthread -lboost_system -o test 
test.o: In function `boost::log::v2_mt_posix::basic_formatting_ostream<char, std::char_traits<char>, std::allocator<char> >& boost::log::v2_mt_posix::basic_formatting_ostream<char, std::char_traits<char>, std::allocator<char> >::formatted_write<wchar_t>(wchar_t const*, long)': 
/usr/include/boost/log/utility/formatting_ostream.hpp:575: undefined reference to `boost::log::v2_mt_posix::aux::code_convert(wchar_t const*, unsigned long, std::string&, std::locale const&)' 
test.o: In function `void boost::log::v2_mt_posix::basic_formatting_ostream<char, std::char_traits<char>, std::allocator<char> >::aligned_write<wchar_t>(wchar_t const*, long)': 
/usr/include/boost/log/utility/formatting_ostream.hpp:696: undefined reference to `boost::log::v2_mt_posix::aux::code_convert(wchar_t const*, unsigned long, std::string&, std::locale const&)' 
/usr/include/boost/log/utility/formatting_ostream.hpp:702: undefined reference to `boost::log::v2_mt_posix::aux::code_convert(wchar_t const*, unsigned long, std::string&, std::locale const&)' 
test.o: In function `void boost::log::v2_mt_posix::sinks::basic_formatting_sink_frontend<char>::feed_record<boost::recursive_mutex, boost::log::v2_mt_posix::sinks::text_file_backend>(boost::log::v2_mt_posix::record_view const&, boost::recursive_mutex&, boost::log::v2_mt_posix::sinks::text_file_backend&)': 
/usr/include/boost/log/sinks/basic_sink_frontend.hpp:445: undefined reference to `boost::log::v2_mt_posix::sinks::text_file_backend::consume(boost::log::v2_mt_posix::record_view const&, std::string const&)' 
test.o: In function `void boost::log::v2_mt_posix::sinks::basic_formatting_sink_frontend<char>::feed_record<boost::log::v2_mt_posix::aux::fake_mutex, boost::log::v2_mt_posix::sinks::text_file_backend>(boost::log::v2_mt_posix::record_view const&, boost::log::v2_mt_posix::aux::fake_mutex&, boost::log::v2_mt_posix::sinks::text_file_backend&)': 
/usr/include/boost/log/sinks/basic_sink_frontend.hpp:445: undefined reference to `boost::log::v2_mt_posix::sinks::text_file_backend::consume(boost::log::v2_mt_posix::record_view const&, std::string const&)' 
collect2: error: ld returned 1 exit status 

[email protected]:~/dev$ g++ -DBOOST_LOG_DYN_LINK test.cpp -Wall -L$BOOST/lib/ -I $BOOST/include/ -pthread -lboost_system -lboost_log_setup -lboost_log -lboost_date_time -lboost_thread -lrt -lboost_filesystem 
/tmp/cczxT0rE.o: In function `boost::log::v2_mt_posix::basic_formatting_ostream<char, std::char_traits<char>, std::allocator<char> >& boost::log::v2_mt_posix::basic_formatting_ostream<char, std::char_traits<char>, std::allocator<char> >::formatted_write<wchar_t>(wchar_t const*, long)': 
test.cpp:(.text._ZN5boost3log11v2_mt_posix24basic_formatting_ostreamIcSt11char_traitsIcESaIcEE15formatted_writeIwEERS6_PKT_l[_ZN5boost3log11v2_mt_posix24basic_formatting_ostreamIcSt11char_traitsIcESaIcEE15formatted_writeIwEERS6_PKT_l]+0xb2): undefined reference to `boost::log::v2_mt_posix::aux::code_convert(wchar_t const*, unsigned long, std::string&, std::locale const&)' 
/tmp/cczxT0rE.o: In function `void boost::log::v2_mt_posix::basic_formatting_ostream<char, std::char_traits<char>, std::allocator<char> >::aligned_write<wchar_t>(wchar_t const*, long)': 
test.cpp:(.text._ZN5boost3log11v2_mt_posix24basic_formatting_ostreamIcSt11char_traitsIcESaIcEE13aligned_writeIwEEvPKT_l[_ZN5boost3log11v2_mt_posix24basic_formatting_ostreamIcSt11char_traitsIcESaIcEE13aligned_writeIwEEvPKT_l]+0xa2): undefined reference to `boost::log::v2_mt_posix::aux::code_convert(wchar_t const*, unsigned long, std::string&, std::locale const&)' 
test.cpp:(.text._ZN5boost3log11v2_mt_posix24basic_formatting_ostreamIcSt11char_traitsIcESaIcEE13aligned_writeIwEEvPKT_l[_ZN5boost3log11v2_mt_posix24basic_formatting_ostreamIcSt11char_traitsIcESaIcEE13aligned_writeIwEEvPKT_l]+0x12e): undefined reference to `boost::log::v2_mt_posix::aux::code_convert(wchar_t const*, unsigned long, std::string&, std::locale const&)' 
/tmp/cczxT0rE.o: In function `void boost::log::v2_mt_posix::sinks::basic_formatting_sink_frontend<char>::feed_record<boost::recursive_mutex, boost::log::v2_mt_posix::sinks::text_file_backend>(boost::log::v2_mt_posix::record_view const&, boost::recursive_mutex&, boost::log::v2_mt_posix::sinks::text_file_backend&)': 
test.cpp:(.text._ZN5boost3log11v2_mt_posix5sinks30basic_formatting_sink_frontendIcE11feed_recordINS_15recursive_mutexENS2_17text_file_backendEEEvRKNS1_11record_viewERT_RT0_[_ZN5boost3log11v2_mt_posix5sinks30basic_formatting_sink_frontendIcE11feed_recordINS_15recursive_mutexENS2_17text_file_backendEEEvRKNS1_11record_viewERT_RT0_]+0x16b): undefined reference to `boost::log::v2_mt_posix::sinks::text_file_backend::consume(boost::log::v2_mt_posix::record_view const&, std::string const&)' 
/tmp/cczxT0rE.o: In function `void boost::log::v2_mt_posix::sinks::basic_formatting_sink_frontend<char>::feed_record<boost::log::v2_mt_posix::aux::fake_mutex, boost::log::v2_mt_posix::sinks::text_file_backend>(boost::log::v2_mt_posix::record_view const&, boost::log::v2_mt_posix::aux::fake_mutex&, boost::log::v2_mt_posix::sinks::text_file_backend&)': 
test.cpp:(.text._ZN5boost3log11v2_mt_posix5sinks30basic_formatting_sink_frontendIcE11feed_recordINS1_3aux10fake_mutexENS2_17text_file_backendEEEvRKNS1_11record_viewERT_RT0_[_ZN5boost3log11v2_mt_posix5sinks30basic_formatting_sink_frontendIcE11feed_recordINS1_3aux10fake_mutexENS2_17text_file_backendEEEvRKNS1_11record_viewERT_RT0_]+0x16b): undefined reference to `boost::log::v2_mt_posix::sinks::text_file_backend::consume(boost::log::v2_mt_posix::record_view const&, std::string const&)' 
collect2: error: ld returned 1 exit status 

代码TEST.CPP的:

/* 
*   Copyright Andrey Semashev 2007 - 2013. 
* Distributed under the Boost Software License, Version 1.0. 
* (See accompanying file LICENSE_1_0.txt or copy at 
*   http://www.boost.org/LICENSE_1_0.txt) 
*/ 
#define BOOST_LOG_DYN_LINK 1 
#include <boost/log/trivial.hpp> 
#include <boost/log/expressions.hpp> 
#include <boost/log/sources/severity_logger.hpp> 
#include <boost/log/sources/record_ostream.hpp> 
#include <boost/log/utility/setup/file.hpp> 
#include <boost/log/utility/setup/common_attributes.hpp> 

namespace logging = boost::log; 
namespace src = boost::log::sources; 
namespace expr = boost::log::expressions; 
namespace keywords = boost::log::keywords; 

//[ example_tutorial_formatters_stream 
void init() 
{ 
    logging::add_file_log 
    (
     keywords::file_name = "sample_%N.log", 
     // This makes the sink to write log records that look like this: 
     // 1: <normal> A normal severity message 
     // 2: <error> An error severity message 
     keywords::format = 
     (
      expr::stream 
       << expr::attr< unsigned int >("LineID") 
       << ": <" << logging::trivial::severity 
       << "> " << expr::smessage 
     ) 
    ); 
} 
//] 

#if 0 

//[ example_tutorial_formatters_stream_date_time 
void init() 
{ 
    logging::add_file_log 
    (
     keywords::file_name = "sample_%N.log", 
     // This makes the sink to write log records that look like this: 
     // YYYY-MM-DD HH:MI:SS: <normal> A normal severity message 
     // YYYY-MM-DD HH:MI:SS: <error> An error severity message 
     keywords::format = 
     (
      expr::stream 
       << expr::format_date_time<boost::posix_time::ptime>("TimeStamp", "%Y-%m-%d %H:%M:%S") 
       << ": <" << logging::trivial::severity 
       << "> " << expr::smessage 
     ) 
    ); 
} 
//] 

#endif 

int main(int, char*[]) 
{ 
    init(); 
    logging::add_common_attributes(); 

    using namespace logging::trivial; 
    src::severity_logger<severity_level> lg; 

    BOOST_LOG_SEV(lg, trace) << "A trace severity message"; 
    BOOST_LOG_SEV(lg, debug) << "A debug severity message"; 
    BOOST_LOG_SEV(lg, info) << "An informational severity message"; 
    BOOST_LOG_SEV(lg, warning) << "A warning severity message"; 
    BOOST_LOG_SEV(lg, error) << "An error severity message"; 
    BOOST_LOG_SEV(lg, fatal) << "A fatal severity message"; 

    return 0; 
} 

我尝试这样做:

g++ -std=c++11 -Wall -pedantic -g -O0 -DBOOST_LOG_DYN_LINK -c test.cpp 
g++ test.o -lboost_log -lboost_thread -lpthread -lboost_system -lboost_log_setup -o test 

这:

g++ -DBOOST_LOG_DYN_LINK test.cpp -Wall -L$BOOST/lib/ -I $BOOST/include/ -pthread -lboost_system -lboost_log_setup -lboost_log -lboost_date_time -lboost_thread -lrt -lboost_filesystem 

从应对这些问题:

linker error while linking boost log tutorial (undefined references)

Boost logger linking issue

Boost.Log linking errors under GNU/Linux

没有成功 - 联和错误信息时相同的错误看起来比略有不同以上问题

因此,我认为我的错误的根本原因是从上面

安装增压版本1.58

回答

1

一些挖后提到的所有不同的,我发现了一个线索: enter image description here 看起来有些文件保留即使是在/ usr/lib中/ x86_64的Linux的GNU的以前版本提升1.58卸载后

的问题解决后,我手动删除与异常的所有libboost *文件* .so.1.58.0(见下文说明原因)从/ usr/lib/x86_64-linux-gnu离开以前的安装(我目前安装的boost v 1.64 i s在/ usr/local中): enter image description here

请注意删除*。所以。 1.58.0文件可能会使一些应用程序无法正常工作(我的情况下是Firefox和Chrome),所以我必须构建boost v 1.58并将它们放回来使它们再次可用