C++ Boost.Log由于缺少代码而无法链接到静态库

C++ Boost.Log由于缺少代码而无法链接到静态库,c++,boost,static-libraries,linker-errors,boost-log,C++,Boost,Static Libraries,Linker Errors,Boost Log,我正在尝试将Boost.Log静态链接到我的程序中。Boost.Log已使用bjam与其他模块成功编译。但是,当我尝试与我的程序链接时,我遇到了一个错误: g++ -g -O2 -pthread -o sonar sonar-main.o sonar-config.o sonar-util.o sonar-logger.o /home/mike/dev/cpp/boost_1_60_0/stage/lib/libboost_system.a /home/mike/dev/cpp/boost_

我正在尝试将Boost.Log静态链接到我的程序中。Boost.Log已使用bjam与其他模块成功编译。但是,当我尝试与我的程序链接时,我遇到了一个错误:

g++  -g -O2 -pthread  -o sonar sonar-main.o sonar-config.o sonar-util.o sonar-logger.o /home/mike/dev/cpp/boost_1_60_0/stage/lib/libboost_system.a /home/mike/dev/cpp/boost_1_60_0/stage/lib/libboost_timer.a /home/mike/dev/cpp/boost_1_60_0/stage/lib/libboost_iostreams.a /home/mike/dev/cpp/boost_1_60_0/stage/lib/libboost_thread.a /home/mike/dev/cpp/boost_1_60_0/stage/lib/libboost_log_setup.a /home/mike/dev/cpp/boost_1_60_0/stage/lib/libboost_log.a /home/mike/dev/cpp/boost_1_60_0/stage/lib/libboost_filesystem.a /home/mike/dev/cpp/boost_1_60_0/stage/lib/libboost_atomic.a -lcrypto -lssl  
sonar-logger.o: In function `void boost::log::v2s_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:702: undefined reference to `boost::log::v2s_mt_posix::aux::code_convert(wchar_t const*, unsigned long, std::string&, std::locale const&)'
/usr/include/boost/log/utility/formatting_ostream.hpp:696: undefined reference to `boost::log::v2s_mt_posix::aux::code_convert(wchar_t const*, unsigned long, std::string&, std::locale const&)'
sonar-logger.o: In function `void boost::log::v2s_mt_posix::type_dispatcher::callback_base::trampoline<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::char_traits<char>, std::allocator<char> > >&>, std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > >(void*, std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&)':
/usr/include/boost/log/utility/formatting_ostream.hpp:575: undefined reference to `boost::log::v2s_mt_posix::aux::code_convert(wchar_t const*, unsigned long, std::string&, std::locale const&)'
collect2: error: ld returned 1 exit status
到目前为止:

  • 我尝试使用本文()对其进行故障排除,该文讨论了它如何成为基于编译的不同名称空间。但是,当我查看libboost_log.a时,我可以看到名为“void boost::log::v2s\u mt\u posix::aux::code\u convert”的函数
  • 这篇文章()说要确保BOOST\u LOG\u USE\u CHAR和BOOST\u LOG\u USE\u WCHAR\T都没有定义,它们没有定义
  • 其他文章说要定义BOOST\u LOG\u DYN\u链接,但我使用的是静态库
  • 以下是如何在my Makefile.am中定义它:

    sonar_CPPFLAGS = -march=native -pipe -funroll-loops -fomit-frame-pointer -fforce-addr -fprefetch-loop-arrays -Wall -std=c++0x
    sonar_SOURCES = main.cpp \
        config.cpp \
        config.hpp \
        util.cpp \
        util.hpp \
        logger.cpp \
        logger.hpp
    sonar_LDADD = /home/mike/dev/cpp/boost_1_60_0/stage/lib/libboost_system.a /home/mike/dev/cpp/boost_1_60_0/stage/lib/libboost_timer.a /home/mike/dev/cpp/boost_1_60_0/stage/lib/libboost_iostreams.a /home/mike/dev/cpp/boost_1_60_0/stage/lib/libboost_thread.a /home/mike/dev/cpp/boost_1_60_0/stage/lib/libboost_log_setup.a /home/mike/dev/cpp/boost_1_60_0/stage/lib/libboost_log.a /home/mike/dev/cpp/boost_1_60_0/stage/lib/libboost_filesystem.a /home/mike/dev/cpp/boost_1_60_0/stage/lib/libboost_atomic.a -lcrypto -lssl 
    sonar_LDFLAGS = -pthread
    

    如何禁止此链接器错误?

    您可能包含旧版本Boost的头文件


    在1.60中,
    code\u convert
    系列函数是模板化的,但您看到的错误是对非模板函数的引用未定义。

    我怀疑您可能包含了另一个版本的Boost的标题。1.60的
    code\u convert
    函数都是模板,而旧版本则不是。您是100%正确的s、 你想把它变成一个答案,这样我就可以投票并接受了吗?原来我在编译器标志中缺少了-I/home/mike/dev/cpp/boost\u 1\u 60\u 0/选项,而且编译器使用的是我为系统安装的头文件。想法不错。
    sonar_CPPFLAGS = -march=native -pipe -funroll-loops -fomit-frame-pointer -fforce-addr -fprefetch-loop-arrays -Wall -std=c++0x
    sonar_SOURCES = main.cpp \
        config.cpp \
        config.hpp \
        util.cpp \
        util.hpp \
        logger.cpp \
        logger.hpp
    sonar_LDADD = /home/mike/dev/cpp/boost_1_60_0/stage/lib/libboost_system.a /home/mike/dev/cpp/boost_1_60_0/stage/lib/libboost_timer.a /home/mike/dev/cpp/boost_1_60_0/stage/lib/libboost_iostreams.a /home/mike/dev/cpp/boost_1_60_0/stage/lib/libboost_thread.a /home/mike/dev/cpp/boost_1_60_0/stage/lib/libboost_log_setup.a /home/mike/dev/cpp/boost_1_60_0/stage/lib/libboost_log.a /home/mike/dev/cpp/boost_1_60_0/stage/lib/libboost_filesystem.a /home/mike/dev/cpp/boost_1_60_0/stage/lib/libboost_atomic.a -lcrypto -lssl 
    sonar_LDFLAGS = -pthread