我有一个使用Boost.Log的静态库。当我想在一个seaparate测试项目中测试这个lib的一些函数时,我得到了以下链接器错误:
undefined reference to `boost::log::v2_mt_posix::sources::aux::global_storage::get_or_init(boost::typeindex::stl_type_index, boost::shared_ptr<boost::log::v2_mt_posix::sources::aux::logger_holder_base> (*)())'
undefined reference to `boost::log::v2_mt_posix::sources::aux::throw_odr_violation(boost::typeindex::stl_type_index, boost::typeindex::stl_type_index, boost::log::v2_mt_posix::sources::aux::logger_holder_base const&)'
undefined reference to `boost::log::v2_mt_posix::aux::code_convert_impl(wchar_t const*, unsigned long, std::string&, std::locale const&)'
我在静态库中有一个logger-class,它配置Boost.Log并安装一个全局记录器。我真的不知道我必须链接到测试项目以使其成功链接。也许你有个主意?
使用CMake,我将以下lib添加到静态lib:
target_link_libraries(RBSLib
boost_system
boost_filesystem
boost_python
boost_date_time
boost_program_options
boost_log
boost_thread
pq
ssl
crypto
boost_regex
pthread
dl
)
以下文章到我的测试项目:
target_link_libraries(${PROJECT_NAME}
boost_system
boost_date_time
boost_unit_test_framework
tbb
pq
ssl
pthread
${PROJECT_BINARY_DIR}/../rbs/libRBSLib.a
boost_thread
boost_filesystem
boost_program_options
crypto
boost_log
)
答案 0 :(得分:0)
在编译静态库时,您需要添加新的库依赖项以及相同的内容。换句话说,您需要将boost路径和boost(编译lib所需)添加到测试项目的编译器和链接器属性中。这是因为您的新lib不与boost(或任何其他库)静态链接在一起。它仍然需要明确的外部库。