首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Boost.test找不到main

Boost.test找不到main
EN

Stack Overflow用户
提问于 2015-11-11 05:46:27
回答 2查看 2.3K关注 0票数 4

我和gcc一起工作4.8,在kubuntu 12.04上提高1.59。

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

代码语言:javascript
复制
#define BOOST_TEST_MODULE My_Module
#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_CASE( foo )
{}

当我用

代码语言:javascript
复制
g++ -std=c++11 main.cpp -I/usr/local/include -L/usr/local/lib -lboost_unit_test_framework -o test

我收到了一堆链接错误:

代码语言:javascript
复制
/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(),但为什么?我的文件的语法是正确的。应该连在一起,不是吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-11 21:13:47

好吧,我找到解决办法了!

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

代码语言:javascript
复制
g++ -std=c++11 main.cpp -I/usr/local/include -L/usr/local/lib -lboost_unit_test_framework -static -o test

...and,它工作得很好!

我还用两个文件进行了测试. main.cpp test1.cpp和运行正确地执行了所有的测试用例。

谢谢,我希望这能帮到别人!

票数 5
EN

Stack Overflow用户

发布于 2015-11-11 10:55:57

您需要在main.cpp顶部插入以下指令

代码语言:javascript
复制
#define BOOST_TEST_DYN_LINK

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

有关详细信息,请参见用C++进行Boost.Test单元测试

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33644914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档