【发布时间】:2015-10-15 08:17:35
【问题描述】:
我正在尝试运行一个虚拟的 Boost.test “hello world”程序。我找到了文档 here 和 there 但显然我缺少一些东西......
这是我所做的:
第 1 步:我安装了依赖项
sudo aptitude install libboost-test-dev
同时安装标头 (libboost-test1.54-dev) 和二进制文件 (libboost-test1.54.0)。
步骤#2:创建要编译的源文件
我有一个名为 test.cpp 的文件,其中包含:
#define BOOST_TEST_MODULE const_string test
#include <boost/test/unit_test.hpp>
// EOF
正如official tutorial 中推荐的那样
第 3 步:编译
我通过调用来编译我的代码:
g++ test.cpp -lboost_unit_test_framework
我不能 100% 确定链接库的选项,因为 official tutorial 没有明确提及它。然而,它似乎与我在/usr/lib 中的库文件名相匹配。另外,链接器不会抱怨找不到共享对象或静态库文件。
返回以下错误:
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
问题
我非常同意链接器:我的代码中没有看到任何main() 函数……但是我应该在哪里以及如何实现它?
我很惊讶,因为我期望必须创建一个 runner.cpp 文件定义函数 main() 但官方 boost tutorial 没有提到这样的事情......
这个answer 建议定义BOOST_TEST_NO_MAIN 宏,但是官方的boost 教程也没有提及。这是正确的做法吗?
有人可以就如何编译我的虚拟“hello world”项目给我明确的分步说明吗?
【问题讨论】:
-
您实际上是否包含了 boost 标头?不应该有
-I/usr/include之类的吗?我相信 boost 测试标头应该为您提供一个主要的... :hmmm: 抱歉,自从我使用 boost::test 以来已经有一段时间了,imo 这有点过度设计 -
默认情况下,编译器可以包含位于
/usr/include的头文件boost/test/unit_test.hpp。因此-I/usr/include并没有改变任何事情......出于好奇:你最喜欢的单元测试框架是什么? (不是我想开始一场激烈的战争!(^.^)) -
官方教程已更新:boost.org/doc/libs/master/libs/test/doc/html/boost_test/…使用header only变体,本节boost.org/doc/libs/master/libs/test/doc/html/boost_test/…介绍所有变体
标签: c++ compiler-errors main boost-test linker-errors