[英]How to link boost unit_test library (boost_unit_test_framework)?
我有簡單的提升單元測試片段:
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MAIN
#define BOOST_TEST_MODULE MyTest
#include <boost/test/unit_test.hpp>
int add(int i, int j) {
return i + j;
}
BOOST_AUTO_TEST_CASE(my_test) {
}
但是通過使用以下命令編譯:
g++ main.cpp --std=c++14 -lboost_unit_test_framework
我收到以下錯誤:
/tmp/ccHOUqfd.o: In function `__static_initialization_and_destruction_0(int, int)':
main.cpp:(.text+0x4ae): undefined reference to `boost::unit_test::ut_detail::auto_test_unit_registrar::auto_test_unit_registrar(boost::unit_test::test_case*, boost::unit_test::decorator::collector&, unsigned long)'
/tmp/ccHOUqfd.o: In function `boost::unit_test::make_test_case(boost::function<void ()> const&, boost::unit_test::basic_cstring<char const>, boost::unit_test::basic_cstring<char const>, unsigned long)':
main.cpp:(.text._ZN5boost9unit_test14make_test_caseERKNS_8functionIFvvEEENS0_13basic_cstringIKcEES8_m[_ZN5boost9unit_test14make_test_caseERKNS_8functionIFvvEEENS0_13basic_cstringIKcEES8_m]+0xa7): undefined reference to `boost::unit_test::test_case::test_case(boost::unit_test::basic_cstring<char const>, boost::unit_test::basic_cstring<char const>, unsigned long, boost::function<void ()> const&)'
collect2: error: ld returned 1 exit status
我嘗試使用僅標頭版本進行編譯並且它可以工作 - 通過將 boost 單元測試更改為:
#include <boost/test/included/unit_test_framework.hpp>
但是編譯時間要長得多。 我在這里缺少什么? 我已經嘗試了幾種使用動態和靜態標志的可能性,但都沒有奏效。
編輯
好的,感謝 cmake 我來到了這個命令:
g++ main.cpp --std=c++14 -rdynamic /usr/local/lib/libboost_unit_test_framework.so -Wl,-rpath,/usr/local/lib
這成功地構建了我的測試。 誰能解釋為什么會這樣? 為什么我需要-rdynamic
,顯式絕對庫路徑和-Wl,-rpath,...
?
好吧,您的 boost 庫顯然安裝在非標准位置。 這就是為什么您需要告訴鏈接器在哪里可以找到單元測試庫所依賴的更多 boost 庫。
有關在 Linux 和 MSVC 2019 上構建和運行的完整示例,請參閱: https : //github.com/jjYBdx4IL/check_zpool
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.