【问题标题】:How to link boost unit_test library (boost_unit_test_framework)?如何链接 boost unit_test 库(boost_unit_test_framework)?
【发布时间】: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>

但是编译时间会更长。我在这里想念什么?我尝试了几种使用动态和静态标志的可能性,但都没有奏效。

Failing online demo

编辑

好的,感谢 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


    【解决方案1】:

    好吧,您的 boost 库显然安装到了非标准位置。这就是为什么您需要告诉链接器在哪里可以找到单元测试库所依赖的更多 boost 库。

    有关在 Linux 和 MSVC 2019 上构建和运行的完整示例,请参阅:https://github.com/jjYBdx4IL/check_zpool

    【讨论】:

      猜你喜欢
      • 2011-04-10
      • 2011-07-10
      • 2012-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-14
      • 2014-05-18
      相关资源
      最近更新 更多