gpt4 book ai didi

c++ - g++ 项目编译与 boost 单元测试

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:37:56 26 4
gpt4 key购买 nike

我正在尝试在 Linux 上编译单元测试( boost ),但编译器报错。有人可以检查我的命令吗?

g++ -o UTest ../UTest/UT1.cpp ../UTest/UT2.cpp -lboost_system -lboost_thread -lboost_unit_test_framework 

错误

/usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'

我从 g++ 命令中删除了 main(),因为在使用 boost unit test 时不应使用它。

怎么了?

PS 没有单元测试的项目(使用 main())编译正常。 Windows 上的单元测试也能正常工作。

更新

main() 的问题已解决。但是一个新的诞生了。

UT1.cppUT2.cpp 都包含了 UTCommon.h 现在我有很多错误,如下所示

错误

tmp2.cpp:(.text+0xd44a): multiple definition of `boost::unit_test::unit_test_log_t::operator<<(boost::unit_test::lazy_ostream const&)'
/tmp/cc0jw8uR.o:tmp.cpp:(.text+0xd44a): first defined here
/tmp/cctLn9QJ.o: In function `boost::test_tools::tt_detail::equal_impl(char const*, char const*)'

UTCommon.h

#ifndef UT_COMMON_H
#define UT_COMMON_H

#ifndef BOOST_TEST_MODULE
#define BOOST_TEST_MODULE UnitTest
#endif

#if defined (__GNUC__) && defined(__unix__)
#include <boost/test/included/unit_test.hpp>
#elif defined (WIN32)
#include <boost/test/unit_test.hpp>
#endif

#endif

最佳答案

最好创建一个单独的 .cpp 文件,其中包含文件 boost/test/included/unit_test.hpp。这将在您的代码中包含一个预生成的 main() 函数。然后,您可以使用 BOOST_AUTO_TEST_CASE 宏进行实际测试(次数不限):

#define BOOST_TEST_DYN_LINK        // this is optional
#define BOOST_TEST_MODULE MyTest // specify the name of your test module
#include <boost/test/included/unit_test.hpp> // include this to get main()


BOOST_AUTO_TEST_CASE(my_test_1) // specify a test case
{
/* Test something... */
const static auto expected = 12;
auto actual = my_func();

BOOST_CHECK(actual == expected);
}

编译此 .cpp 文件(根据需要为您自己的代码中定义的所有函数添加链接器选项),它将成为执行所有测试并生成报告的可执行文件。

关于c++ - g++ 项目编译与 boost 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13547771/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com