Boost.test 找不到主要内容
Boost.test cannot find main
我正在使用 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
我收到一堆 linker 错误:
/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
undefined reference to 'main' 是什么意思???好吧,我知道这是因为找不到 main()
但为什么呢? AFAIK 我文件的语法是正确的。应该是link,不是吗?
您需要在 main.cpp
的顶部插入以下指令:
#define BOOST_TEST_DYN_LINK
似乎 Boost.test 文档中的示例仅适用于静态链接:但是,上述指令对于动态链接是必需的。
有关详细信息,请参阅 C++ Unit Testing With Boost.Test。
好的,我找到了解决方案!
似乎从 1.34.1 开始,boost.test 不再包含动态 (.so) 版本中的 main()。参见 here。所以我想 link 使用静态,我还了解到 gcc 更喜欢动态库而不是同名的静态库!。因此,我将编译命令更改为:
g++ -std=c++11 main.cpp -I/usr/local/include -L/usr/local/lib -lboost_unit_test_framework -static -o test
...而且效果很好!
我还测试了两个文件...main.cpp test1.cpp
并且 运行 正确执行了所有测试用例。
谢谢,希望对大家有帮助!
我正在使用 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
我收到一堆 linker 错误:
/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
undefined reference to 'main' 是什么意思???好吧,我知道这是因为找不到 main()
但为什么呢? AFAIK 我文件的语法是正确的。应该是link,不是吗?
您需要在 main.cpp
的顶部插入以下指令:
#define BOOST_TEST_DYN_LINK
似乎 Boost.test 文档中的示例仅适用于静态链接:但是,上述指令对于动态链接是必需的。
有关详细信息,请参阅 C++ Unit Testing With Boost.Test。
好的,我找到了解决方案!
似乎从 1.34.1 开始,boost.test 不再包含动态 (.so) 版本中的 main()。参见 here。所以我想 link 使用静态,我还了解到 gcc 更喜欢动态库而不是同名的静态库!。因此,我将编译命令更改为:
g++ -std=c++11 main.cpp -I/usr/local/include -L/usr/local/lib -lboost_unit_test_framework -static -o test
...而且效果很好!
我还测试了两个文件...main.cpp test1.cpp
并且 运行 正确执行了所有测试用例。
谢谢,希望对大家有帮助!