Я застреваю, пытаясь понять, почему мои тесты не будут связаны. Я использую Boost.Build и Boost.Test от Boost 1.59 на Ubuntu. Я построил и установил библиотеки boost из исходного кода.Использование Boost.Build и Boost.Test - ошибки компоновщика
Я указываю <library>/boost//unit_test_framework
как часть требований к использованию единичного теста. Я понимаю, что для связи с Boost.Test это должно установить все требования к компоновщику.
К сожалению, я получаю кучу ошибок компоновщика для неопределенных ссылок на компоненты Boost.Test даже если команда ссылки с указанием -lboost_unit_test_framework
послеtest.o
файла.
У меня есть очень простой пример, который демонстрирует описанное поведение:
В Jamroot
:
if $(BOOST_ROOT)
{
use-project /boost : $(BOOST_ROOT) ;
}
import boost ;
boost.use-project ;
using testing ;
unit-test test
: test.cpp
: <library>/boost//unit_test_framework
;
В test.cpp
:
#define BOOST_TEST_MODULE test
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_CASE (pass) {
}
Бег b2 -d+2
дает мне команды компиляции и компоновщика, используются.
$ b2 -a -d+2
gcc.compile.c++ bin/gcc-4.9.2/debug/test.o
"g++" -ftemplate-depth-128 -O0 -fno-inline -Wall -g -std=c++11 -fPIC -DBOOST_ALL_NO_LIB -DBOOST_TEST_DYN_LINK -c -o "bin/gcc-4.9.2/debug/test.o" "test.cpp"
gcc.link bin/gcc-4.9.2/debug/test
"g++" -o "bin/gcc-4.9.2/debug/test" -Wl,--start-group "bin/gcc-4.9.2/debug/test.o" -Wl,-Bstatic -Wl,-Bdynamic -lboost_unit_test_framework -Wl,--end-group -g
bin/gcc-4.9.2/debug/test.o: In function `__static_initialization_and_destruction_0(int, int)':
/home/anthony/Development/example/test.cpp:4: undefined reference to `boost::unit_test::ut_detail::auto_test_unit_registrar::auto_test_unit_registrar(boost::unit_test::test_case*, boost::unit_test::decorator::collector&, unsigned long)'
bin/gcc-4.9.2/debug/test.o: In function `boost::unit_test::make_test_case(boost::function<void()> const&, boost::unit_test::basic_cstring<char const>, boost::unit_test::basic_cstring<char const>, unsigned long)':
/usr/local/include/boost/test/tree/test_unit.hpp:249: undefined reference to `boost::unit_test::test_case::test_case(boost::unit_test::basic_cstring<char const>, boost::unit_test::basic_cstring<char const>, unsigned long, boost::function<void()> const&)'
collect2: error: ld returned 1 exit status
...skipped <pbin/gcc-4.9.2/debug>test.passed for lack of <pbin/gcc-4.9.2/debug>test...
...failed updating 1 target...