Boost.test无法找到主

时间:2015-11-11 05:46:27

标签: c++ c++11 gcc boost g++

我正在使用gcc 4.8,在kubuntu 12.04上提升1.59。

我写了一个简单的main.cpp文件:

#define BOOST_TEST_MODULE My_Module
#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_CASE( foo )
{}

当我使用

构建时,这不起作用
g++ -std=c++11 main.cpp -I/usr/local/include -L/usr/local/lib -lboost_unit_test_framework -o test

我收到一堆链接器错误:

/usr/lib/x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to 'main'
/tmp/cc57ppN0.o: In function `__static_initialization_and_destruction_0(int, int)':
main.cpp:(.text+0x131): undefined reference to `boost::unit_test::ut_detail::auto_test_unit_registrar::auto_test_unit_registrar(boost::unit_test::test_case*, unsigned long)'
/tmp/cc57ppN0.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>)':
main.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

未定义对'main'的引用是什么意思?好吧,我知道这是因为它找不到main(),但为什么呢? AFAIK我的文件的语法是正确的。它应该链接,不是吗?

2 个答案:

答案 0 :(得分:5)

您需要在main.cpp

的顶部插入以下指令
#define BOOST_TEST_DYN_LINK

Boost.test文档中的示例似乎只适用于静态链接:但是,上面的指令是动态链接所必需的。

有关详细信息,请参见C++ Unit Testing With Boost.Test

答案 1 :(得分:3)

好的,我找到了解决方案!

从1.34.1开始,boost.test 似乎不再包含动态(.so)版本中的main()。见here。所以我想与静态链接,我也了解到 gcc更喜欢动态库而不是静态库同名!。因此,我将编译命令更改为:

a = Doctor.objects.select_related(doctortranslations__language='ru', citytranslations__language='ru')

......它工作正常!

我还测试了两个文件...... g++ -std=c++11 main.cpp -I/usr/local/include -L/usr/local/lib -lboost_unit_test_framework -static -o test 并且运行正确执行了所有测试用例。

谢谢,我希望这可以帮助别人!