在静态库中使用boost :: log的链接器错误

时间:2016-01-02 18:45:47

标签: c++ logging boost linker

我有一个使用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
)

1 个答案:

答案 0 :(得分:0)

在编译静态库时,您需要添加新的库依赖项以及相同的内容。换句话说,您需要将boost路径和boost(编译lib所需)添加到测试项目的编译器和链接器属性中。这是因为您的新lib不与boost(或任何其他库)静态链接在一起。它仍然需要明确的外部库。