簡體   English   中英

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

我收到一堆鏈接器錯誤:

/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我的文件的語法是正確的。 它應該鏈接,不是嗎?

您需要在main.cpp的頂部插入以下指令:

#define BOOST_TEST_DYN_LINK

似乎Boost.test文檔中的示例僅適用於靜態鏈接:但是,上面的指令對於動態鏈接是必需的。

有關更多詳細信息,請參閱例如使用Boost.Test進行C ++單元測試

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

從1.34.1開始,boost.test似乎不再包含動態(.so)版本中的main() 看到這里 所以我想與靜態鏈接,我也了解到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並且運行正確執行了所有測試用例。

謝謝,我希望這可以幫助別人!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM