1
我有一個使用Boost.Log的靜態庫。當我想測試這個LIB的一些功能在seaparate測試項目中,我得到的follwing鏈接錯誤:鏈接器錯誤使用boost :: log在一個靜態庫中
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&)'
我在靜態庫,其配置Boost.Log並安裝一個全球性的記錄器記錄器級。我真的不知道我必須鏈接到測試項目才能成功鏈接。也許你有一個想法?
通過CMake我添加了以下庫的靜態庫:
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
)
而且follwing庫到我的測試項目:
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
)
我想我已經像你解釋過的那樣做了。我用一些CMake部分更新了我的帖子,也許libs的順序有錯誤?當我移動libRBSLib.a條目時,錯誤發生了變化。 – Paul
@保羅我不認爲這是庫的順序。您的測試項目的依賴關係應該涉及靜態庫的依賴關係。在靜態庫的配置中刪除不必要的庫,或者將它們添加到測試項目中(例如boost_python)。 – seleciii44
好吧,我還沒有將boost lib目錄添加到我的測試項目的Cmake文件中。現在它編譯:-) – Paul