【问题标题】:Linker error while building unit tests with Boost使用 Boost 构建单元测试时出现链接器错误
【发布时间】:2015-11-11 04:02:53
【问题描述】:

我正在使用 gcc 4.8.2 和 Boost 1.59。我在 Kubuntu 12.04 LTS 上运行。我只是在尝试编写一个简单的单元测试应用程序,但遇到了链接器错误。

这是我的代码:

ma​​in.cpp

#define BOOST_TEST_MODULE My Module
#define BOOST_TEST_DYN_LINK
#include <boost/test/unit_test.hpp>

test1.cpp

#define BOOST_TEST_DYN_LINK
#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_SUITE( suite1 );
BOOST_AUTO_TEST_CASE( case1 )
{
    BOOST_TEST_MESSAGE( "Hello!" );
}
BOOST_AUTO_TEST_SUITE_END();

当我构建时,我会这样做:g++ -std=c++11 -o test main.cpp test1.cpp -I/usr/local/include -L/usr/local/lib -lboost_unit_test_framework。我得到了这个结果:

/tmp/ccmNLUMx.o: In function `__static_initialization_and_destruction_0(int, int)':
test1.cpp:(.text+0x15e): undefined reference to `boost::unit_test::ut_detail::auto_test_unit_registrar::auto_test_unit_registrar(boost::unit_test::basic_cstring<char const>)'
test1.cpp:(.text+0x1b9): undefined reference to `boost::unit_test::ut_detail::auto_test_unit_registrar::auto_test_unit_registrar(boost::unit_test::test_case*, unsigned long)'
/tmp/ccmNLUMx.o: In function `boost::unit_test::make_test_case(boost::unit_test::callback0<boost::unit_test::ut_detail::unused> const&, boost::unit_test::basic_cstring<char const>)':
test1.cpp: (.text._ZN5boost9unit_test14make_test_caseERKNS0_9callback0INS0_9ut_detail6unusedEEENS0_13basic_cstringIKcEE[_ZN5boost9unit_test14make_test_caseERKNS0_9callback0INS0_9ut_detail6unusedEEENS0_13basic_cstringIKcEE]+0x6d): undefined reference to `boost::unit_test::test_case::test_case(boost::unit_test::basic_cstring<char const>, boost::unit_test::callback0<boost::unit_test::ut_detail::unused> const&)'
collect2: erreur: ld a retourné 1 code d'état d'exécution

你知道我做错了什么吗?谢谢!

多米尼克

编辑

here 给出的内容无法解决我的问题... :-(

【问题讨论】:

  • 您能否在您在编辑部分发布的链接中尝试解决方案后发布您尝试的编译命令?
  • @jayant 我接受了“成功”命令:g++ -I/usr/local/include -o test main.cpp -L/usr/local/lib -Wl,-Bdynamic -lboost_unit_test_framework。同样的错误。好像少了点什么。作者用的是Boost 1.52,我用的是1.59。我自己从源代码构建它......我很困惑,因为几年前我可以使用以前版本的 Boost 轻松构建测试。我不是说 1.59 有错误,而是我的 1.59 安装可能是错误的???
  • 我找到了解决办法,见this post

标签: c++ unit-testing c++11 gcc boost


【解决方案1】:

我遇到了同样的问题。我的解决方案是,更改包含路径:

#include <boost/test/unit_test.hpp> // wrong  
#include <boost/test/included/unit_test.hpp> // this work

我在boost unit test 的第一个示例中找到了解决方案。我用 boost 1.60 和 gcc 4.8.5 测试它

【讨论】:

  • 这帮助我在 Ubuntu 16.04.3 LTS 上使用 Boost 1.58 和 SunPro 编译器 V 12.5。
  • 对我也有用,但编译时间增加了 10 倍!
【解决方案2】:

添加-D_GLIBCXX_USE_CXX11_ABI=0 来编译选项为我解决了这个问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多