Boost.Log linking errors under GNU/Linux

2019-03-13 01:55发布

问题:

I would like to test the Boost.Log library. Unfortunately, I get link errors.

I use Arch Linux, and I installed Boost headers and libraries via built-in package manager pacman:

  • boost 1.54.0-3
  • boost-libs 1.54.0-2

When compiling the simple example from official site via g++ log.cpp -lboost_log -lpthread, I get the following errors:

log.cpp:(.text+0x42): undefined reference to `boost::log::v2s_mt_posix::trivial::logger::get()'
log.cpp:(.text+0x9b): undefined reference to `boost::log::v2s_mt_posix::trivial::logger::get()'
...

I've read Why my application fails to link with Boost.Log?, but I couldn't solve the link errors. It only gives me the hint that the library where boost::log::v2s_mt_posix::trivial::logger::get() is in was linked statically. But under directory /usr/lib/ there are only dynamically linked Boost libraries with extension .so.

Maybe, someone has a clue what's going wrong here.

Thank you.

回答1:

You need to define BOOST_LOG_DYN_LINK:

g++ -DBOOST_LOG_DYN_LINK blog.cpp -lboost_log -lpthread


回答2:

If you are using cmake then:

find_package(Boost REQUIRED COMPONENTS system log)
target_link_libraries(credential ${Boost_SYSTEM_LIBRARY} ${Boost_LOG_LIBRARY})

and use:

#define BOOST_LOG_DYN_LINK 1


标签: c++ linux boost