【发布时间】:2017-05-21 17:13:48
【问题描述】:
我有简单的 boost 单元测试 sn-p:
#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,...?
【问题讨论】:
标签: c++ boost linker boost-test