Whenever I compile a program using boost::signal I get following errors:
/tmp/ccQFaJsy.o: In function `main':
b_vect.cpp:(.text+0xb7): undefined reference to `boost::signals::connection::~connection()'
/tmp/ccQFaJsy.o: In function `boost::signals::detail::slot_base::data_t::~data_t()':
b_vect.cpp:(.text._ZN5boost7signals6detail9slot_base6data_tD1Ev[boost::signals::detail::slot_base::data_t::~data_t()]+0x16): undefined reference to `boost::signals::connection::~connection()'
/tmp/ccQFaJsy.o: In function `boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::signal0(boost::last_value<void> const&, std::less<int> const&)':
b_vect.cpp:(.text._ZN5boost7signal0IvNS_10last_valueIvEEiSt4lessIiENS_9function0IvSaINS_13function_baseEEEEEC1ERKS2_RKS4_[boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::signal0(boost::last_value<void> const&, std::less<int> const&)]+0x51): undefined reference to `boost::signals::detail::signal_base::signal_base(boost::function2<bool, boost::signals::detail::stored_group, boost::signals::detail::stored_group, std::allocator<boost::function_base> > const&, boost::any const&)'
/tmp/ccQFaJsy.o: In function `boost::slot<boost::function0<void, std::allocator<boost::function_base> > >::slot<HelloWorld>(HelloWorld const&)':
b_vect.cpp:(.text._ZN5boost4slotINS_9function0IvSaINS_13function_baseEEEEEC1I10HelloWorldEERKT_[boost::slot<boost::function0<void, std::allocator<boost::function_base> > >::slot<HelloWorld>(HelloWorld const&)]+0xac): undefined reference to `boost::signals::detail::slot_base::create_connection()'
/tmp/ccQFaJsy.o: In function `boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::connect(boost::slot<boost::function0<void, std::allocator<boost::function_base> > > const&, boost::signals::connect_position)':
b_vect.cpp:(.text._ZN5boost7signal0IvNS_10last_valueIvEEiSt4lessIiENS_9function0IvSaINS_13function_baseEEEEE7connectERKNS_4slotIS8_EENS_7signals16connect_positionE[boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::connect(boost::slot<boost::function0<void, std::allocator<boost::function_base> > > const&, boost::signals::connect_position)]+0x9a): undefined reference to `boost::signals::detail::signal_base_impl::connect_slot(boost::any const&, boost::signals::detail::stored_group const&, boost::shared_ptr<boost::signals::detail::slot_base::data_t>, boost::signals::connect_position)'
/tmp/ccQFaJsy.o: In function `void boost::iterator_core_access::increment<boost::signals::detail::named_slot_map_iterator>(boost::signals::detail::named_slot_map_iterator&)':
b_vect.cpp:(.text._ZN5boost20iterator_core_access9incrementINS_7signals6detail23named_slot_map_iteratorEEEvRT_[void boost::iterator_core_access::increment<boost::signals::detail::named_slot_map_iterator>(boost::signals::detail::named_slot_map_iterator&)]+0x11): undefined reference to `boost::signals::detail::named_slot_map_iterator::increment()'
/tmp/ccQFaJsy.o: In function `bool boost::iterator_core_access::equal<boost::signals::detail::named_slot_map_iterator, boost::signals::detail::named_slot_map_iterator>(boost::signals::detail::named_slot_map_iterator const&, boost::signals::detail::named_slot_map_iterator const&, mpl_::bool_<true>)':
b_vect.cpp:(.text._ZN5boost20iterator_core_access5equalINS_7signals6detail23named_slot_map_iteratorES4_EEbRKT_RKT0_N4mpl_5bool_ILb1EEE[bool boost::iterator_core_access::equal<boost::signals::detail::named_slot_map_iterator, boost::signals::detail::named_slot_map_iterator>(boost::signals::detail::named_slot_map_iterator const&, boost::signals::detail::named_slot_map_iterator const&, mpl_::bool_<true>)]+0x19): undefined reference to `boost::signals::detail::named_slot_map_iterator::equal(boost::signals::detail::named_slot_map_iterator const&) const'
/tmp/ccQFaJsy.o: In function `boost::signals::detail::named_slot_map_iterator::reference boost::iterator_core_access::dereference<boost::signals::detail::named_slot_map_iterator>(boost::signals::detail::named_slot_map_iterator const&)':
b_vect.cpp:(.text._ZN5boost20iterator_core_access11dereferenceINS_7signals6detail23named_slot_map_iteratorEEENT_9referenceERKS5_[boost::signals::detail::named_slot_map_iterator::reference boost::iterator_core_access::dereference<boost::signals::detail::named_slot_map_iterator>(boost::signals::detail::named_slot_map_iterator const&)]+0x11): undefined reference to `boost::signals::detail::named_slot_map_iterator::dereference() const'
/tmp/ccQFaJsy.o: In function `boost::signals::detail::named_slot_map_iterator std::__find_if<boost::signals::detail::named_slot_map_iterator, boost::signals::detail::is_callable>(boost::signals::detail::named_slot_map_iterator, boost::signals::detail::named_slot_map_iterator, boost::signals::detail::is_callable, std::input_iterator_tag)':
b_vect.cpp:(.text._ZSt9__find_ifIN5boost7signals6detail23named_slot_map_iteratorENS2_11is_callableEET_S5_S5_T0_St18input_iterator_tag[boost::signals::detail::named_slot_map_iterator std::__find_if<boost::signals::detail::named_slot_map_iterator, boost::signals::detail::is_callable>(boost::signals::detail::named_slot_map_iterator, boost::signals::detail::named_slot_map_iterator, boost::signals::detail::is_callable, std::input_iterator_tag)]+0x6d): undefined reference to `boost::signals::detail::named_slot_map_iterator::named_slot_map_iterator(boost::signals::detail::named_slot_map_iterator const&)'
/tmp/ccQFaJsy.o: In function `boost::signals::detail::named_slot_map_iterator std::find_if<boost::signals::detail::named_slot_map_iterator, boost::signals::detail::is_callable>(boost::signals::detail::named_slot_map_iterator, boost::signals::detail::named_slot_map_iterator, boost::signals::detail::is_callable)':
b_vect.cpp:(.text._ZSt7find_ifIN5boost7signals6detail23named_slot_map_iteratorENS2_11is_callableEET_S5_S5_T0_[boost::signals::detail::named_slot_map_iterator std::find_if<boost::signals::detail::named_slot_map_iterator, boost::signals::detail::is_callable>(boost::signals::detail::named_slot_map_iterator, boost::signals::detail::named_slot_map_iterator, boost::signals::detail::is_callable)]+0x2b): undefined reference to `boost::signals::detail::named_slot_map_iterator::named_slot_map_iterator(boost::signals::detail::named_slot_map_iterator const&)'
b_vect.cpp:(.text._ZSt7find_ifIN5boost7signals6detail23named_slot_map_iteratorENS2_11is_callableEET_S5_S5_T0_[boost::signals::detail::named_slot_map_iterator std::find_if<boost::signals::detail::named_slot_map_iterator, boost::signals::detail::is_callable>(boost::signals::detail::named_slot_map_iterator, boost::signals::detail::named_slot_map_iterator, boost::signals::detail::is_callable)]+0x38): undefined reference to `boost::signals::detail::named_slot_map_iterator::named_slot_map_iterator(boost::signals::detail::named_slot_map_iterator const&)'
/tmp/ccQFaJsy.o: In function `boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::slot_call_iterator(boost::signals::detail::named_slot_map_iterator, boost::signals::detail::named_slot_map_iterator, boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::optional<boost::signals::detail::unusable>&)':
b_vect.cpp:(.text._ZN5boost7signals6detail18slot_call_iteratorINS1_11call_bound0IvE6callerINS_9function0IvSaINS_13function_baseEEEEEENS1_23named_slot_map_iteratorEEC1ESB_SB_SA_RNS_8optionalINS1_8unusableEEE[boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::slot_call_iterator(boost::signals::detail::named_slot_map_iterator, boost::signals::detail::named_slot_map_iterator, boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::optional<boost::signals::detail::unusable>&)]+0x34): undefined reference to `boost::signals::detail::named_slot_map_iterator::named_slot_map_iterator(boost::signals::detail::named_slot_map_iterator const&)'
b_vect.cpp:(.text._ZN5boost7signals6detail18slot_call_iteratorINS1_11call_bound0IvE6callerINS_9function0IvSaINS_13function_baseEEEEEENS1_23named_slot_map_iteratorEEC1ESB_SB_SA_RNS_8optionalINS1_8unusableEEE[boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::slot_call_iterator(boost::signals::detail::named_slot_map_iterator, boost::signals::detail::named_slot_map_iterator, boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::optional<boost::signals::detail::unusable>&)]+0x45): undefined reference to `boost::signals::detail::named_slot_map_iterator::named_slot_map_iterator(boost::signals::detail::named_slot_map_iterator const&)'
/tmp/ccQFaJsy.o:b_vect.cpp:(.text._ZN5boost7signals6detail18slot_call_iteratorINS1_11call_bound0IvE6callerINS_9function0IvSaINS_13function_baseEEEEEENS1_23named_slot_map_iteratorEEC1ESB_SB_SA_RNS_8optionalINS1_8unusableEEE[boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::slot_call_iterator(boost::signals::detail::named_slot_map_iterator, boost::signals::detail::named_slot_map_iterator, boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::optional<boost::signals::detail::unusable>&)]+0x71): more undefined references to `boost::signals::detail::named_slot_map_iterator::named_slot_map_iterator(boost::signals::detail::named_slot_map_iterator const&)' follow
/tmp/ccQFaJsy.o: In function `boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::slot_call_iterator(boost::signals::detail::named_slot_map_iterator, boost::signals::detail::named_slot_map_iterator, boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::optional<boost::signals::detail::unusable>&)':
b_vect.cpp:(.text._ZN5boost7signals6detail18slot_call_iteratorINS1_11call_bound0IvE6callerINS_9function0IvSaINS_13function_baseEEEEEENS1_23named_slot_map_iteratorEEC1ESB_SB_SA_RNS_8optionalINS1_8unusableEEE[boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::slot_call_iterator(boost::signals::detail::named_slot_map_iterator, boost::signals::detail::named_slot_map_iterator, boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::optional<boost::signals::detail::unusable>&)]+0xa6): undefined reference to `boost::signals::detail::named_slot_map_iterator::operator=(boost::signals::detail::named_slot_map_iterator const&)'
/tmp/ccQFaJsy.o: In function `boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::increment()':
b_vect.cpp:(.text._ZN5boost7signals6detail18slot_call_iteratorINS1_11call_bound0IvE6callerINS_9function0IvSaINS_13function_baseEEEEEENS1_23named_slot_map_iteratorEE9incrementEv[boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::increment()]+0x19): undefined reference to `boost::signals::detail::named_slot_map_iterator::named_slot_map_iterator(boost::signals::detail::named_slot_map_iterator const&)'
b_vect.cpp:(.text._ZN5boost7signals6detail18slot_call_iteratorINS1_11call_bound0IvE6callerINS_9function0IvSaINS_13function_baseEEEEEENS1_23named_slot_map_iteratorEE9incrementEv[boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::increment()]+0x31): undefined reference to `boost::signals::detail::named_slot_map_iterator::named_slot_map_iterator(boost::signals::detail::named_slot_map_iterator const&)'
b_vect.cpp:(.text._ZN5boost7signals6detail18slot_call_iteratorINS1_11call_bound0IvE6callerINS_9function0IvSaINS_13function_baseEEEEEENS1_23named_slot_map_iteratorEE9incrementEv[boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::increment()]+0x56): undefined reference to `boost::signals::detail::named_slot_map_iterator::operator=(boost::signals::detail::named_slot_map_iterator const&)'
/tmp/ccQFaJsy.o: In function `boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::equal(boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator> const&) const':
b_vect.cpp:(.text._ZNK5boost7signals6detail18slot_call_iteratorINS1_11call_bound0IvE6callerINS_9function0IvSaINS_13function_baseEEEEEENS1_23named_slot_map_iteratorEE5equalERKSC_[boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::equal(boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator> const&) const]+0x2c): undefined reference to `boost::signals::detail::named_slot_map_iterator::named_slot_map_iterator(boost::signals::detail::named_slot_map_iterator const&)'
b_vect.cpp:(.text._ZNK5boost7signals6detail18slot_call_iteratorINS1_11call_bound0IvE6callerINS_9function0IvSaINS_13function_baseEEEEEENS1_23named_slot_map_iteratorEE5equalERKSC_[boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::equal(boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator> const&) const]+0x3c): undefined reference to `boost::signals::detail::named_slot_map_iterator::named_slot_map_iterator(boost::signals::detail::named_slot_map_iterator const&)'
b_vect.cpp:(.text._ZNK5boost7signals6detail18slot_call_iteratorINS1_11call_bound0IvE6callerINS_9function0IvSaINS_13function_baseEEEEEENS1_23named_slot_map_iteratorEE5equalERKSC_[boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::equal(boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator> const&) const]+0x70): undefined reference to `boost::signals::detail::named_slot_map_iterator::operator=(boost::signals::detail::named_slot_map_iterator const&)'
b_vect.cpp:(.text._ZNK5boost7signals6detail18slot_call_iteratorINS1_11call_bound0IvE6callerINS_9function0IvSaINS_13function_baseEEEEEENS1_23named_slot_map_iteratorEE5equalERKSC_[boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::equal(boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator> const&) const]+0x84): undefined reference to `boost::signals::detail::named_slot_map_iterator::named_slot_map_iterator(boost::signals::detail::named_slot_map_iterator const&)'
b_vect.cpp:(.text._ZNK5boost7signals6detail18slot_call_iteratorINS1_11call_bound0IvE6callerINS_9function0IvSaINS_13function_baseEEEEEENS1_23named_slot_map_iteratorEE5equalERKSC_[boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::equal(boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator> const&) const]+0x94): undefined reference to `boost::signals::detail::named_slot_map_iterator::named_slot_map_iterator(boost::signals::detail::named_slot_map_iterator const&)'
b_vect.cpp:(.text._ZNK5boost7signals6detail18slot_call_iteratorINS1_11call_bound0IvE6callerINS_9function0IvSaINS_13function_baseEEEEEENS1_23named_slot_map_iteratorEE5equalERKSC_[boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator>::equal(boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound0<void>::caller<boost::function0<void, std::allocator<boost::function_base> > >, boost::signals::detail::named_slot_map_iterator> const&) const]+0xbf): undefined reference to `boost::signals::detail::named_slot_map_iterator::operator=(boost::signals::detail::named_slot_map_iterator const&)'
/tmp/ccQFaJsy.o: In function `boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::operator()()':
b_vect.cpp:(.text._ZN5boost7signal0IvNS_10last_valueIvEEiSt4lessIiENS_9function0IvSaINS_13function_baseEEEEEclEv[boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::operator()()]+0x22): undefined reference to `boost::signals::detail::call_notification::call_notification(boost::shared_ptr<boost::signals::detail::signal_base_impl> const&)'
b_vect.cpp:(.text._ZN5boost7signal0IvNS_10last_valueIvEEiSt4lessIiENS_9function0IvSaINS_13function_baseEEEEEclEv[boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::operator()()]+0x69): undefined reference to `boost::signals::detail::named_slot_map::end()'
b_vect.cpp:(.text._ZN5boost7signal0IvNS_10last_valueIvEEiSt4lessIiENS_9function0IvSaINS_13function_baseEEEEEclEv[boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::operator()()]+0x85): undefined reference to `boost::signals::detail::named_slot_map::end()'
b_vect.cpp:(.text._ZN5boost7signal0IvNS_10last_valueIvEEiSt4lessIiENS_9function0IvSaINS_13function_baseEEEEEclEv[boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::operator()()]+0xc9): undefined reference to `boost::signals::detail::named_slot_map::end()'
b_vect.cpp:(.text._ZN5boost7signal0IvNS_10last_valueIvEEiSt4lessIiENS_9function0IvSaINS_13function_baseEEEEEclEv[boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::operator()()]+0xe2): undefined reference to `boost::signals::detail::named_slot_map::begin()'
b_vect.cpp:(.text._ZN5boost7signal0IvNS_10last_valueIvEEiSt4lessIiENS_9function0IvSaINS_13function_baseEEEEEclEv[boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::operator()()]+0x141): undefined reference to `boost::signals::detail::call_notification::~call_notification()'
b_vect.cpp:(.text._ZN5boost7signal0IvNS_10last_valueIvEEiSt4lessIiENS_9function0IvSaINS_13function_baseEEEEEclEv[boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::operator()()]+0x184): undefined reference to `boost::signals::detail::call_notification::~call_notification()'
/tmp/ccQFaJsy.o: In function `boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::~signal0()':
b_vect.cpp:(.text._ZN5boost7signal0IvNS_10last_valueIvEEiSt4lessIiENS_9function0IvSaINS_13function_baseEEEEED1Ev[boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::~signal0()]+0x1a): undefined reference to `boost::signals::trackable::~trackable()'
b_vect.cpp:(.text._ZN5boost7signal0IvNS_10last_valueIvEEiSt4lessIiENS_9function0IvSaINS_13function_baseEEEEED1Ev[boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::~signal0()]+0x2b): undefined reference to `boost::signals::detail::signal_base::~signal_base()'
b_vect.cpp:(.text._ZN5boost7signal0IvNS_10last_valueIvEEiSt4lessIiENS_9function0IvSaINS_13function_baseEEEEED1Ev[boost::signal0<void, boost::last_value<void>, int, std::less<int>, boost::function0<void, std::allocator<boost::function_base> > >::~signal0()]+0x46): undefined reference to `boost::signals::detail::signal_base::~signal_base()'
collect2: ld returned 1 exit status
Can someone help me please.
those are errors from the linker. so, the code compiles fine, and all the objetcs are produced, but the linker is telling you that you have used symbols (e.g., functions, class methods) which don't appear in any of the objects or files you're linking. so, you'll have to add the objects or libraries with those symbols to the list of files to be linked. the symbols you want may be in the boost binaries.
This may be a bit late for your answer. After seeing your code in the comments , i thing you are not calling the right library.
#include <boost/signals2.hpp>
#include <iostream>
void func1()
{
std::cout << "Hello world" << std::flush;
}
int main()
{
boost::signals2::signal<void ()> s;
s.connect(func1);
s();
}
you got to include signals2.hpp and not signals(though I am not very sure of it). This works just fine for me.
Related
I am a C++ newbie trying to compile some OpenCV tutorial code.
I'm running Ubuntu 16.04, and I installed OpenCV 3.1.0 with this script: https://github.com/milq/scripts-ubuntu-debian/blob/master/install-opencv.sh
The source file I'm trying to compile is here:
https://github.com/opencv/opencv/blob/master/samples/cpp/tutorial_code/calib3d/camera_calibration/camera_calibration.cpp
I wrote this makefile:
CC=g++
CFLAGS = `pkg-config --cflags opencv` -c -g
LIBS = `pkg-config --libs opencv`
all: camcalib
camcalib: camera_calibration.o
$(CC) camera_calibration.o -o camcalib
camera_calibration.o: camera_calibration.cpp
$(CC) $(CFLAGS) $(LIBS) camera_calibration.cpp
clean:
rm *o camcalib
When I "make", the camera_calibration.o object file is generated, but I get the following error during linking:
make
g++ `pkg-config --cflags opencv` -c -g `pkg-config --libs opencv` camera_calibration.cpp
g++ camera_calibration.o -o camcalib
camera_calibration.o: In function `cv::read(cv::FileNode const&, bool&, bool)':
/usr/local/include/opencv2/core/persistence.hpp:996: undefined reference to `cv::read(cv::FileNode const&, int&, int)'
camera_calibration.o: In function `cv::operator<<(cv::FileStorage&, char const*)':
/usr/local/include/opencv2/core/persistence.hpp:1076: undefined reference to `cv::operator<<(cv::FileStorage&, cv::String const&)'
camera_calibration.o: In function `cv::operator<<(cv::FileStorage&, char*)':
/usr/local/include/opencv2/core/persistence.hpp:1084: undefined reference to `cv::operator<<(cv::FileStorage&, cv::String const&)'
camera_calibration.o: In function `void cv::operator>><std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(cv::FileNode const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&)':
/usr/local/include/opencv2/core/cvstd.inl.hpp:155: undefined reference to `cv::read(cv::FileNode const&, cv::String&, cv::String const&)'
camera_calibration.o: In function `main':
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:239: undefined reference to `cv::FileStorage::FileStorage(cv::String const&, int, cv::String const&)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:240: undefined reference to `cv::FileStorage::isOpened() const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:245: undefined reference to `cv::FileStorage::operator[](char const*) const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:246: undefined reference to `cv::FileStorage::release()'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:292: undefined reference to `cv::flip(cv::_InputArray const&, cv::_OutputArray const&, int)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:309: undefined reference to `cv::findChessboardCorners(cv::_InputArray const&, cv::Size_<int>, cv::_OutputArray const&, int)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:312: undefined reference to `cv::SimpleBlobDetector::Params::Params()'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:312: undefined reference to `cv::SimpleBlobDetector::create(cv::SimpleBlobDetector::Params const&)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:312: undefined reference to `cv::findCirclesGrid(cv::_InputArray const&, cv::Size_<int>, cv::_OutputArray const&, int, cv::Ptr<cv::Feature2D> const&)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:315: undefined reference to `cv::SimpleBlobDetector::Params::Params()'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:315: undefined reference to `cv::SimpleBlobDetector::create(cv::SimpleBlobDetector::Params const&)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:315: undefined reference to `cv::findCirclesGrid(cv::_InputArray const&, cv::Size_<int>, cv::_OutputArray const&, int, cv::Ptr<cv::Feature2D> const&)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:329: undefined reference to `cv::cvtColor(cv::_InputArray const&, cv::_OutputArray const&, int, int)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:331: undefined reference to `cv::cornerSubPix(cv::_InputArray const&, cv::_InputOutputArray const&, cv::Size_<int>, cv::Size_<int>, cv::TermCriteria)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:335: undefined reference to `cv::VideoCapture::isOpened() const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:339: undefined reference to `cv::VideoCapture::isOpened() const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:343: undefined reference to `cv::drawChessboardCorners(cv::_InputOutputArray const&, cv::Size_<int>, cv::_InputArray const&, bool)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:351: undefined reference to `cv::getTextSize(cv::String const&, int, double, int, int*)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:357: undefined reference to `cv::format(char const*, ...)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:359: undefined reference to `cv::format(char const*, ...)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:362: undefined reference to `cv::putText(cv::_InputOutputArray const&, cv::String const&, cv::Point_<int>, int, double, cv::Scalar_<double>, int, int, bool)'
camera_calibration.o: In function `main':
/usr/local/include/opencv2/core.hpp:1257: undefined reference to `cv::noArray()'
camera_calibration.o: In function `main':
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:365: undefined reference to `cv::bitwise_not(cv::_InputArray const&, cv::_OutputArray const&, cv::_InputArray const&)'
camera_calibration.o: In function `main':
/usr/local/include/opencv2/imgproc.hpp:2609: undefined reference to `cv::noArray()'
camera_calibration.o: In function `main':
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:372: undefined reference to `cv::undistort(cv::_InputArray const&, cv::_OutputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:377: undefined reference to `cv::imshow(cv::String const&, cv::_InputArray const&)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:378: undefined reference to `cv::VideoCapture::isOpened() const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:378: undefined reference to `cv::waitKey(int)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:386: undefined reference to `cv::VideoCapture::isOpened() const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:404: undefined reference to `cv::fisheye::estimateNewCameraMatrixForUndistortRectify(cv::_InputArray const&, cv::_InputArray const&, cv::Size_<int> const&, cv::_InputArray const&, cv::_OutputArray const&, double, cv::Size_<int> const&, double)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:406: undefined reference to `cv::fisheye::initUndistortRectifyMap(cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::Size_<int> const&, int, cv::_OutputArray const&, cv::_OutputArray const&)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:412: undefined reference to `cv::getOptimalNewCameraMatrix(cv::_InputArray const&, cv::_InputArray const&, cv::Size_<int>, double, cv::Size_<int>, cv::Rect_<int>*, bool)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:413: undefined reference to `cv::initUndistortRectifyMap(cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::Size_<int>, int, cv::_OutputArray const&, cv::_OutputArray const&)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:418: undefined reference to `cv::imread(cv::String const&, int)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:421: undefined reference to `cv::remap(cv::_InputArray const&, cv::_OutputArray const&, cv::_InputArray const&, cv::_InputArray const&, int, int, cv::Scalar_<double> const&)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:422: undefined reference to `cv::imshow(cv::String const&, cv::_InputArray const&)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:423: undefined reference to `cv::waitKey(int)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:239: undefined reference to `cv::FileStorage::~FileStorage()'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:431: undefined reference to `cv::FileStorage::~FileStorage()'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:431: undefined reference to `cv::FileStorage::~FileStorage()'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:239: undefined reference to `cv::FileStorage::~FileStorage()'
camera_calibration.o: In function `computeReprojectionErrors(std::vector<std::vector<cv::Point3_<float>, std::allocator<cv::Point3_<float> > >, std::allocator<std::vector<cv::Point3_<float>, std::allocator<cv::Point3_<float> > > > > const&, std::vector<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > >, std::allocator<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > > > > const&, std::vector<cv::Mat, std::allocator<cv::Mat> > const&, std::vector<cv::Mat, std::allocator<cv::Mat> > const&, cv::Mat const&, cv::Mat const&, std::vector<float, std::allocator<float> >&, bool)':
/usr/local/include/opencv2/calib3d.hpp:1795: undefined reference to `cv::noArray()'
camera_calibration.o: In function `computeReprojectionErrors(std::vector<std::vector<cv::Point3_<float>, std::allocator<cv::Point3_<float> > >, std::allocator<std::vector<cv::Point3_<float>, std::allocator<cv::Point3_<float> > > > > const&, std::vector<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > >, std::allocator<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > > > > const&, std::vector<cv::Mat, std::allocator<cv::Mat> > const&, std::vector<cv::Mat, std::allocator<cv::Mat> > const&, cv::Mat const&, cv::Mat const&, std::vector<float, std::allocator<float> >&, bool)':
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:450: undefined reference to `cv::fisheye::projectPoints(cv::_InputArray const&, cv::_OutputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, double, cv::_OutputArray const&)'
camera_calibration.o: In function `computeReprojectionErrors(std::vector<std::vector<cv::Point3_<float>, std::allocator<cv::Point3_<float> > >, std::allocator<std::vector<cv::Point3_<float>, std::allocator<cv::Point3_<float> > > > > const&, std::vector<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > >, std::allocator<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > > > > const&, std::vector<cv::Mat, std::allocator<cv::Mat> > const&, std::vector<cv::Mat, std::allocator<cv::Mat> > const&, cv::Mat const&, cv::Mat const&, std::vector<float, std::allocator<float> >&, bool)':
/usr/local/include/opencv2/calib3d.hpp:513: undefined reference to `cv::noArray()'
camera_calibration.o: In function `computeReprojectionErrors(std::vector<std::vector<cv::Point3_<float>, std::allocator<cv::Point3_<float> > >, std::allocator<std::vector<cv::Point3_<float>, std::allocator<cv::Point3_<float> > > > > const&, std::vector<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > >, std::allocator<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > > > > const&, std::vector<cv::Mat, std::allocator<cv::Mat> > const&, std::vector<cv::Mat, std::allocator<cv::Mat> > const&, cv::Mat const&, cv::Mat const&, std::vector<float, std::allocator<float> >&, bool)':
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:454: undefined reference to `cv::projectPoints(cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_OutputArray const&, cv::_OutputArray const&, double)'
camera_calibration.o: In function `computeReprojectionErrors(std::vector<std::vector<cv::Point3_<float>, std::allocator<cv::Point3_<float> > >, std::allocator<std::vector<cv::Point3_<float>, std::allocator<cv::Point3_<float> > > > > const&, std::vector<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > >, std::allocator<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > > > > const&, std::vector<cv::Mat, std::allocator<cv::Mat> > const&, std::vector<cv::Mat, std::allocator<cv::Mat> > const&, cv::Mat const&, cv::Mat const&, std::vector<float, std::allocator<float> >&, bool)':
/usr/local/include/opencv2/core.hpp:668: undefined reference to `cv::noArray()'
camera_calibration.o: In function `computeReprojectionErrors(std::vector<std::vector<cv::Point3_<float>, std::allocator<cv::Point3_<float> > >, std::allocator<std::vector<cv::Point3_<float>, std::allocator<cv::Point3_<float> > > > > const&, std::vector<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > >, std::allocator<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > > > > const&, std::vector<cv::Mat, std::allocator<cv::Mat> > const&, std::vector<cv::Mat, std::allocator<cv::Mat> > const&, cv::Mat const&, cv::Mat const&, std::vector<float, std::allocator<float> >&, bool)':
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:456: undefined reference to `cv::norm(cv::_InputArray const&, cv::_InputArray const&, int, cv::_InputArray const&)'
camera_calibration.o: In function `runCalibration(Settings&, cv::Size_<int>&, cv::Mat&, cv::Mat&, std::vector<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > >, std::allocator<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > > > >, std::vector<cv::Mat, std::allocator<cv::Mat> >&, std::vector<cv::Mat, std::allocator<cv::Mat> >&, std::vector<float, std::allocator<float> >&, double&)':
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:497: undefined reference to `cv::Mat::eye(int, int, int)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:502: undefined reference to `cv::Mat::zeros(int, int, int)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:504: undefined reference to `cv::Mat::zeros(int, int, int)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:518: undefined reference to `cv::fisheye::calibrate(cv::_InputArray const&, cv::_InputArray const&, cv::Size_<int> const&, cv::_InputOutputArray const&, cv::_InputOutputArray const&, cv::_OutputArray const&, cv::_OutputArray const&, int, cv::TermCriteria)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:528: undefined reference to `cv::calibrateCamera(cv::_InputArray const&, cv::_InputArray const&, cv::Size_<int>, cv::_InputOutputArray const&, cv::_InputOutputArray const&, cv::_OutputArray const&, cv::_OutputArray const&, int, cv::TermCriteria)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:533: undefined reference to `cv::checkRange(cv::_InputArray const&, bool, cv::Point_<int>*, double, double)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:533: undefined reference to `cv::checkRange(cv::_InputArray const&, bool, cv::Point_<int>*, double, double)'
camera_calibration.o: In function `saveCameraParams(Settings&, cv::Size_<int>&, cv::Mat&, cv::Mat&, std::vector<cv::Mat, std::allocator<cv::Mat> > const&, std::vector<cv::Mat, std::allocator<cv::Mat> > const&, std::vector<float, std::allocator<float> > const&, std::vector<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > >, std::allocator<std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > > > > const&, double)':
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:547: undefined reference to `cv::FileStorage::FileStorage(cv::String const&, int, cv::String const&)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:588: undefined reference to `cvWriteComment'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:604: undefined reference to `cv::error(int, cv::String const&, char const*, char const*, int)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:611: undefined reference to `cv::error(int, cv::String const&, char const*, char const*, int)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:612: undefined reference to `cv::error(int, cv::String const&, char const*, char const*, int)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:614: undefined reference to `cv::Mat::t() const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:615: undefined reference to `cv::Mat::t() const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:626: undefined reference to `cv::Mat::reshape(int, int) const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:628: undefined reference to `cv::Mat::copyTo(cv::_OutputArray const&) const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:547: undefined reference to `cv::FileStorage::~FileStorage()'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:632: undefined reference to `cv::FileStorage::~FileStorage()'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:632: undefined reference to `cv::FileStorage::~FileStorage()'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:547: undefined reference to `cv::FileStorage::~FileStorage()'
camera_calibration.o: In function `cv::FileStorage& cv::operator<< <int>(cv::FileStorage&, int const&)':
/usr/local/include/opencv2/core/persistence.hpp:1064: undefined reference to `cv::error(int, cv::String const&, char const*, char const*, int)'
/usr/local/include/opencv2/core/persistence.hpp:1065: undefined reference to `cv::write(cv::FileStorage&, cv::String const&, int)'
camera_calibration.o: In function `cv::FileStorage& cv::operator<< <float>(cv::FileStorage&, float const&)':
/usr/local/include/opencv2/core/persistence.hpp:1064: undefined reference to `cv::error(int, cv::String const&, char const*, char const*, int)'
/usr/local/include/opencv2/core/persistence.hpp:1065: undefined reference to `cv::write(cv::FileStorage&, cv::String const&, float)'
camera_calibration.o: In function `cv::FileStorage& cv::operator<< <bool>(cv::FileStorage&, bool const&)':
/usr/local/include/opencv2/core/persistence.hpp:1064: undefined reference to `cv::error(int, cv::String const&, char const*, char const*, int)'
/usr/local/include/opencv2/core/persistence.hpp:1065: undefined reference to `cv::write(cv::FileStorage&, cv::String const&, int)'
camera_calibration.o: In function `void cv::operator>><int>(cv::FileNode const&, int&)':
/usr/local/include/opencv2/core/persistence.hpp:1121: undefined reference to `cv::read(cv::FileNode const&, int&, int)'
camera_calibration.o: In function `void cv::operator>><float>(cv::FileNode const&, float&)':
/usr/local/include/opencv2/core/persistence.hpp:1121: undefined reference to `cv::read(cv::FileNode const&, float&, float)'
camera_calibration.o: In function `cv::FileStorage& cv::operator<< <cv::Mat>(cv::FileStorage&, cv::Mat const&)':
/usr/local/include/opencv2/core/persistence.hpp:1064: undefined reference to `cv::error(int, cv::String const&, char const*, char const*, int)'
/usr/local/include/opencv2/core/persistence.hpp:1065: undefined reference to `cv::write(cv::FileStorage&, cv::String const&, cv::Mat const&)'
camera_calibration.o: In function `cv::FileStorage& cv::operator<< <double>(cv::FileStorage&, double const&)':
/usr/local/include/opencv2/core/persistence.hpp:1064: undefined reference to `cv::error(int, cv::String const&, char const*, char const*, int)'
/usr/local/include/opencv2/core/persistence.hpp:1065: undefined reference to `cv::write(cv::FileStorage&, cv::String const&, double)'
camera_calibration.o: In function `cv::String::String(char const*)':
/usr/local/include/opencv2/core/cvstd.hpp:625: undefined reference to `cv::String::allocate(unsigned long)'
camera_calibration.o: In function `cv::String::~String()':
/usr/local/include/opencv2/core/cvstd.hpp:667: undefined reference to `cv::String::deallocate()'
camera_calibration.o: In function `cv::Mat::Mat(cv::Mat const&)':
/usr/local/include/opencv2/core/mat.inl.hpp:400: undefined reference to `cv::Mat::copySize(cv::Mat const&)'
camera_calibration.o: In function `cv::Mat::Mat(int, int, int, void*, unsigned long)':
/usr/local/include/opencv2/core/mat.inl.hpp:410: undefined reference to `cv::error(int, cv::String const&, char const*, char const*, int)'
/usr/local/include/opencv2/core/mat.inl.hpp:426: undefined reference to `cv::error(int, cv::String const&, char const*, char const*, int)'
camera_calibration.o: In function `cv::Mat::~Mat()':
/usr/local/include/opencv2/core/mat.inl.hpp:571: undefined reference to `cv::fastFree(void*)'
camera_calibration.o: In function `cv::Mat::operator=(cv::Mat const&)':
/usr/local/include/opencv2/core/mat.inl.hpp:592: undefined reference to `cv::Mat::copySize(cv::Mat const&)'
camera_calibration.o: In function `cv::Mat::row(int) const':
/usr/local/include/opencv2/core/mat.inl.hpp:606: undefined reference to `cv::Mat::Mat(cv::Mat const&, cv::Range const&, cv::Range const&)'
camera_calibration.o: In function `cv::Mat::clone() const':
/usr/local/include/opencv2/core/mat.inl.hpp:643: undefined reference to `cv::Mat::copyTo(cv::_OutputArray const&) const'
camera_calibration.o: In function `cv::Mat::create(int, int, int)':
/usr/local/include/opencv2/core/mat.inl.hpp:663: undefined reference to `cv::Mat::create(int, int const*, int)'
camera_calibration.o: In function `cv::Mat::release()':
/usr/local/include/opencv2/core/mat.inl.hpp:682: undefined reference to `cv::Mat::deallocate()'
camera_calibration.o: In function `cv::Mat::operator()(cv::Range, cv::Range) const':
/usr/local/include/opencv2/core/mat.inl.hpp:692: undefined reference to `cv::Mat::Mat(cv::Mat const&, cv::Range const&, cv::Range const&)'
camera_calibration.o: In function `cv::FileStorage::getFirstTopLevelNode() const':
/usr/local/include/opencv2/core/persistence.hpp:1167: undefined reference to `cv::FileStorage::root(int) const'
camera_calibration.o: In function `cv::FileNode::begin() const':
/usr/local/include/opencv2/core/persistence.hpp:1184: undefined reference to `cv::FileNodeIterator::FileNodeIterator(CvFileStorage const*, CvFileNode const*, unsigned long)'
camera_calibration.o: In function `cv::FileNode::end() const':
/usr/local/include/opencv2/core/persistence.hpp:1185: undefined reference to `cv::FileNode::size() const'
/usr/local/include/opencv2/core/persistence.hpp:1185: undefined reference to `cv::FileNodeIterator::FileNodeIterator(CvFileStorage const*, CvFileNode const*, unsigned long)'
camera_calibration.o: In function `cv::String::String(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
/usr/local/include/opencv2/core/cvstd.inl.hpp:81: undefined reference to `cv::String::allocate(unsigned long)'
camera_calibration.o: In function `cv::FileNode::operator std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >[abi:cxx11]() const':
/usr/local/include/opencv2/core/cvstd.inl.hpp:147: undefined reference to `cv::read(cv::FileNode const&, cv::String&, cv::String const&)'
camera_calibration.o: In function `Settings::Settings()':
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:31: undefined reference to `cv::VideoCapture::VideoCapture()'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:31: undefined reference to `cv::VideoCapture::~VideoCapture()'
camera_calibration.o: In function `Settings::read(cv::FileNode const&)':
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:60: undefined reference to `cv::FileNode::operator[](char const*) const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:61: undefined reference to `cv::FileNode::operator[](char const*) const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:62: undefined reference to `cv::FileNode::operator[](char const*) const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:63: undefined reference to `cv::FileNode::operator[](char const*) const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:64: undefined reference to `cv::FileNode::operator[](char const*) const'
camera_calibration.o:/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:65: more undefined references to `cv::FileNode::operator[](char const*) const' follow
camera_calibration.o: In function `Settings::validate()':
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:118: undefined reference to `cv::VideoCapture::open(int)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:120: undefined reference to `cv::VideoCapture::open(cv::String const&)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:121: undefined reference to `cv::VideoCapture::isOpened() const'
camera_calibration.o: In function `Settings::nextImage()':
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:157: undefined reference to `cv::VideoCapture::isOpened() const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:160: undefined reference to `cv::VideoCapture::operator>>(cv::Mat&)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:161: undefined reference to `cv::Mat::copyTo(cv::_OutputArray const&) const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:164: undefined reference to `cv::imread(cv::String const&, int)'
camera_calibration.o: In function `Settings::readStringList(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&)':
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:172: undefined reference to `cv::FileStorage::FileStorage(cv::String const&, int, cv::String const&)'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:173: undefined reference to `cv::FileStorage::isOpened() const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:176: undefined reference to `cv::FileNode::type() const'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:179: undefined reference to `cv::FileNodeIterator::operator++()'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:172: undefined reference to `cv::FileStorage::~FileStorage()'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:182: undefined reference to `cv::FileStorage::~FileStorage()'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:182: undefined reference to `cv::FileStorage::~FileStorage()'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:172: undefined reference to `cv::FileStorage::~FileStorage()'
camera_calibration.o: In function `Settings::~Settings()':
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:28: undefined reference to `cv::VideoCapture::~VideoCapture()'
/home/paradisolab/Desktop/camera_calibration/camera_calibration.cpp:28: undefined reference to `cv::VideoCapture::~VideoCapture()'
camera_calibration.o: In function `cv::Mat::Mat<cv::Point_<float> >(std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > > const&, bool)':
/usr/local/include/opencv2/core/mat.inl.hpp:484: undefined reference to `cv::Mat::copyTo(cv::_OutputArray const&) const'
camera_calibration.o: In function `cv::Mat::Mat<float>(std::vector<float, std::allocator<float> > const&, bool)':
/usr/local/include/opencv2/core/mat.inl.hpp:484: undefined reference to `cv::Mat::copyTo(cv::_OutputArray const&) const'
collect2: error: ld returned 1 exit status
makefile:9: recipe for target 'camcalib' failed
make: *** [camcalib] Error 1
It seems OpenCV is installed, because when I type "pkg-config --libs --cflags opencv" in terminal, I get:
-I/usr/local/include/opencv -I/usr/local/include -L/usr/local/lib -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_viz -lippicv -lopencv_core
I've been trying lots of things, but I'm stumped. If anyone has any advice, I would greatly appreciate it.
UPDATE
Solved the issue. The was the structure of the g++ command. This one worked for me:
g++ tutorial.cpp -I/opt/local/include -I/usr/include/boost -L/opt/local/lib -lmongoclient -lboost_thread -lboost_system -lboost_regex -o tutorial
OS: Ubuntu 16.04 64-bit
Following this tutorial:
https://mongodb.github.io/mongo-cxx-driver/legacy-v1/tutorial/
I'm able to build the mongodb-client using SCons with no issue.
mongo folder of header files here:
/opt/local/include
libmongoclient.a file here:
/opt/local/lib
Code is as follows, same as the tutorial:
#include <cstdlib>
#include <iostream>
#include "mongo/client/dbclient.h" // for the driver
void run() {
mongo::DBClientConnection c;
c.connect("localhost");
}
int main() {
mongo::client::initialize();
try {
run();
std::cout << "connected ok" << std::endl;
} catch( const mongo::DBException &e ) {
std::cout << "caught " << e.what() << std::endl;
}
return EXIT_SUCCESS;
}
This is the command I'm using to compile:
g++ -I/opt/local/include -L/opt/local/lib -pthread -lmongoclient -lboost_thread -lboost_system -lboost_filesystem -lboost_program_options tutorial.cpp -o tutorial
I receive the following error
/tmp/cceJe78D.o: In function `run()':
tutorial.cpp:(.text+0x34): undefined reference to `mongo::DBClientConnection::DBClientConnection(bool, mongo::DBClientReplicaSet*, double)'
/tmp/cceJe78D.o: In function `main':
tutorial.cpp:(.text+0x12f): undefined reference to `mongo::client::Options::Options()'
tutorial.cpp:(.text+0x148): undefined reference to `mongo::client::initialize(mongo::client::Options const&)'
/tmp/cceJe78D.o: In function `__static_initialization_and_destruction_0(int, int)':
tutorial.cpp:(.text+0x299): undefined reference to `boost::system::generic_category()'
tutorial.cpp:(.text+0x2a5): undefined reference to `boost::system::generic_category()'
tutorial.cpp:(.text+0x2b1): undefined reference to `boost::system::system_category()'
/tmp/cceJe78D.o: In function `mongo::DBException::DBException(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)':
tutorial.cpp:(.text._ZN5mongo11DBExceptionC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi[_ZN5mongo11DBExceptionC5ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi]+0x21): undefined reference to `vtable for mongo::DBException'
/tmp/cceJe78D.o: In function `mongo::DBException::~DBException()':
tutorial.cpp:(.text._ZN5mongo11DBExceptionD2Ev[_ZN5mongo11DBExceptionD5Ev]+0x10): undefined reference to `vtable for mongo::DBException'
/tmp/cceJe78D.o: In function `mongo::DBException::addContext(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
tutorial.cpp:(.text._ZN5mongo11DBException10addContextERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE[_ZN5mongo11DBException10addContextERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE]+0x33): undefined reference to `mongo::causedBy(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/tmp/cceJe78D.o: In function `mongo::UserException::UserException(int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
tutorial.cpp:(.text._ZN5mongo13UserExceptionC2EiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE[_ZN5mongo13UserExceptionC5EiRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE]+0x2a): undefined reference to `vtable for mongo::UserException'
/tmp/cceJe78D.o: In function `mongo::UserException::~UserException()':
tutorial.cpp:(.text._ZN5mongo13UserExceptionD2Ev[_ZN5mongo13UserExceptionD5Ev]+0xd): undefined reference to `vtable for mongo::UserException'
/tmp/cceJe78D.o: In function `mongo::DBClientConnection::~DBClientConnection()':
tutorial.cpp:(.text._ZN5mongo18DBClientConnectionD2Ev[_ZN5mongo18DBClientConnectionD5Ev]+0xe): undefined reference to `vtable for mongo::DBClientConnection'
tutorial.cpp:(.text._ZN5mongo18DBClientConnectionD2Ev[_ZN5mongo18DBClientConnectionD5Ev]+0x1a): undefined reference to `vtable for mongo::DBClientConnection'
tutorial.cpp:(.text._ZN5mongo18DBClientConnectionD2Ev[_ZN5mongo18DBClientConnectionD5Ev]+0x2c): undefined reference to `mongo::DBClientConnection::_numConnections'
tutorial.cpp:(.text._ZN5mongo18DBClientConnectionD2Ev[_ZN5mongo18DBClientConnectionD5Ev]+0xbb): undefined reference to `mongo::DBClientBase::~DBClientBase()'
tutorial.cpp:(.text._ZN5mongo18DBClientConnectionD2Ev[_ZN5mongo18DBClientConnectionD5Ev]+0x189): undefined reference to `mongo::DBClientBase::~DBClientBase()'
/tmp/cceJe78D.o: In function `mongo::DBClientConnection::connect(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
tutorial.cpp:(.text._ZN5mongo18DBClientConnection7connectERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE[_ZN5mongo18DBClientConnection7connectERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE]+0x78): undefined reference to `mongo::HostAndPort::HostAndPort(mongo::StringData const&)'
/tmp/cceJe78D.o:(.gcc_except_table+0x50): undefined reference to `typeinfo for mongo::DBException'
/tmp/cceJe78D.o:(.rodata._ZTVN5mongo16ConnectExceptionE[_ZTVN5mongo16ConnectExceptionE]+0x30): undefined reference to `mongo::UserException::appendPrefix(std::__cxx11::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >&) const'
/tmp/cceJe78D.o:(.rodata._ZTVN5mongo16ConnectExceptionE[_ZTVN5mongo16ConnectExceptionE]+0x40): undefined reference to `mongo::DBException::toString[abi:cxx11]() const'
/tmp/cceJe78D.o:(.rodata._ZTVN5mongo18AssertionExceptionE[_ZTVN5mongo18AssertionExceptionE]+0x40): undefined reference to `mongo::DBException::toString[abi:cxx11]() const'
/tmp/cceJe78D.o:(.rodata._ZTIN5mongo16ConnectExceptionE[_ZTIN5mongo16ConnectExceptionE]+0x10): undefined reference to `typeinfo for mongo::UserException'
/tmp/cceJe78D.o:(.rodata._ZTIN5mongo18AssertionExceptionE[_ZTIN5mongo18AssertionExceptionE]+0x10): undefined reference to `typeinfo for mongo::DBException'
collect2: error: ld returned 1 exit status
I've searched around Google, and saw some people with the same issue, but they didn't appear to be linking files correctly. As far as I can tell I'm doing everything correctly.
Any help would be greatly appreciated.
EDIT
Output if I change the command to:
g++ tutorial.cpp -I/opt/local/include -I/usr/include/boost -L/opt/local/lib -pthread -lmongoclient -lboost_thread -lboost_system -lboost_filesystem -lboost_program_options -o tutorial
/opt/local/lib/libmongoclient.a(dbclient.o): In function `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::assign(char const*, char const*, unsigned int)':
/usr/include/boost/regex/v4/basic_regex.hpp:380: undefined reference to `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::do_assign(char const*, char const*, unsigned int)'
/opt/local/lib/libmongoclient.a(dbclient.o): In function `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::unwind_extra_block(bool)':
/usr/include/boost/regex/v4/perl_matcher_non_recursive.hpp:1135: undefined reference to `boost::re_detail::put_mem_block(void*)'
/opt/local/lib/libmongoclient.a(dbclient.o): In function `boost::cpp_regex_traits<char>::transform_primary(char const*, char const*) const':
/usr/include/boost/regex/v4/cpp_regex_traits.hpp:965: undefined reference to `boost::re_detail::cpp_regex_traits_implementation<char>::transform_primary(char const*, char const*) const'
/opt/local/lib/libmongoclient.a(dbclient.o): In function `boost::cpp_regex_traits<char>::transform(char const*, char const*) const':
/usr/include/boost/regex/v4/cpp_regex_traits.hpp:961: undefined reference to `boost::re_detail::cpp_regex_traits_implementation<char>::transform(char const*, char const*) const'
/opt/local/lib/libmongoclient.a(dbclient.o): In function `void boost::re_detail::raise_error<boost::regex_traits_wrapper<boost::regex_traits<char, boost::cpp_regex_traits<char> > > >(boost::regex_traits_wrapper<boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::error_type)':
/usr/include/boost/regex/pattern_except.hpp:75: undefined reference to `boost::re_detail::raise_runtime_error(std::runtime_error const&)'
/opt/local/lib/libmongoclient.a(dbclient.o): In function `boost::re_detail::cpp_regex_traits_implementation<char>::error_string(boost::regex_constants::error_type) const':
/usr/include/boost/regex/v4/cpp_regex_traits.hpp:448: undefined reference to `boost::re_detail::get_default_error_string(boost::regex_constants::error_type)'
/opt/local/lib/libmongoclient.a(dbclient.o): In function `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::extend_stack()':
/usr/include/boost/regex/v4/perl_matcher_non_recursive.hpp:213: undefined reference to `boost::re_detail::get_mem_block()'
/opt/local/lib/libmongoclient.a(dbclient.o): In function `boost::re_detail::save_state_init::save_state_init(boost::re_detail::saved_state**, boost::re_detail::saved_state**)':
/usr/include/boost/regex/v4/perl_matcher_non_recursive.hpp:107: undefined reference to `boost::re_detail::get_mem_block()'
/opt/local/lib/libmongoclient.a(dbclient.o): In function `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::match_imp()':
/usr/include/boost/regex/v4/perl_matcher_common.hpp:208: undefined reference to `boost::re_detail::verify_options(unsigned int, boost::regex_constants::_match_flags)'
/opt/local/lib/libmongoclient.a(dbclient.o): In function `boost::re_detail::save_state_init::~save_state_init()':
/usr/include/boost/regex/v4/perl_matcher_non_recursive.hpp:115: undefined reference to `boost::re_detail::put_mem_block(void*)'
/opt/local/lib/libmongoclient.a(dbclient.o): In function `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::match_prefix()':
/usr/include/boost/regex/v4/perl_matcher_common.hpp:333: undefined reference to `boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >::maybe_assign(boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > const&)'
/opt/local/lib/libmongoclient.a(dbclient.o): In function `boost::re_detail::save_state_init::~save_state_init()':
/usr/include/boost/regex/v4/perl_matcher_non_recursive.hpp:115: undefined reference to `boost::re_detail::put_mem_block(void*)'
/opt/local/lib/libmongoclient.a(dbclient.o): In function `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::perl_matcher(__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >&, boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags, __gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >)':
/usr/include/boost/regex/v4/perl_matcher.hpp:365: undefined reference to `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::construct_init(boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags)'
/opt/local/lib/libmongoclient.a(dbclient.o): In function `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::match_match()':
/usr/include/boost/regex/v4/perl_matcher_non_recursive.hpp:991: undefined reference to `boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >::maybe_assign(boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > const&)'
collect2: error: ld returned 1 exit status
In your g++ command, try to have tutorial.cpp first before the other libs. Some linkers needs to see the objects that need symbols first (from left to right)
I have a project that has been compiling and linking for months with no problems. A recent upgrade of ubuntu to 15.10 bumped the boost version from 1.55 to 1.58. Now all of a sudden I am getting undefined reference errors. I get the errors whether or not I use static linking or dynamic linking:
dynamic:
> g++ -L"/home/peter/workspace/icflib/Debug" -pthread -o "icfapp"
> ./src/AdminModule.o ./src/CaptureModule.o ./src/FFTModule.o
> ./src/GPSModule.o ./src/ReportModule.o ./src/icfapp.o -licflib
> -lboost_program_options -lboost_date_time -lboost_filesystem -lboost_system -lfftw3 -lmysqlcppconn -lmysqlclient ./src/FFTModule.o: In function
> `boost::filesystem::path::path<boost::filesystem::directory_entry>(boost::filesystem::directory_entry
> const&,
> boost::enable_if<boost::filesystem::path_traits::is_pathable<boost::decay<boost::filesystem::directory_entry>::type>,
> void>::type*)': /usr/include/boost/filesystem/path.hpp:140: undefined
> reference to
> `boost::filesystem::path_traits::dispatch(boost::filesystem::directory_entry
> const&, std::string&)' ./src/icfapp.o: In function
> `processCommandLine(int, char**)':
> /home/peter/workspace/icfapp/Debug/../src/icfapp.cpp:85: undefined
> reference to
> `boost::program_options::options_description::options_description(std::string
> const&, unsigned int, unsigned int)' ./src/icfapp.o: In function
> `boost::program_options::validation_error::validation_error(boost::program_options::validation_error::kind_t,
> std::string const&, std::string const&, int)':
> /usr/include/boost/program_options/errors.hpp:373: undefined
> reference to
> `boost::program_options::validation_error::get_template(boost::program_options::validation_error::kind_t)'
> /usr/include/boost/program_options/errors.hpp:373: undefined
> reference to
> `boost::program_options::error_with_option_name::error_with_option_name(std::string
> const&, std::string const&, std::string const&, int)' ./src/icfapp.o:
> In function
> `boost::program_options::variables_map::operator[](std::string const&)
> const': /usr/include/boost/program_options/variables_map.hpp:155:
> undefined reference to
> `boost::program_options::abstract_variables_map::operator[](std::string
> const&) const' ./src/icfapp.o: In function
> `boost::program_options::basic_command_line_parser<char>::basic_command_line_parser(int,
> char const* const*)':
> /usr/include/boost/program_options/detail/parsers.hpp:43: undefined
> reference to
> `boost::program_options::detail::cmdline::cmdline(std::vector<std::string,
> std::allocator<std::string> > const&)' ./src/icfapp.o: In function
> `boost::program_options::basic_command_line_parser<char>::extra_parser(boost::function1<std::pair<std::string,
> std::string>, std::string const&>)':
> /usr/include/boost/program_options/detail/parsers.hpp:77: undefined
> reference to
> `boost::program_options::detail::cmdline::set_additional_parser(boost::function1<std::pair<std::string,
> std::string>, std::string const&>)' ./src/icfapp.o: In function
> `std::vector<std::string, std::allocator<std::string> >
> boost::program_options::to_internal<std::string>(std::vector<std::string,
> std::allocator<std::string> > const&)':
> /usr/include/boost/program_options/detail/convert.hpp:79: undefined
> reference to `boost::program_options::to_internal(std::string const&)'
> ./src/icfapp.o:(.rodata._ZTVN5boost15program_options11typed_valueIlcEE[_ZTVN5boost15program_options11typed_valueIlcEE]+0x38):
> undefined reference to
> `boost::program_options::value_semantic_codecvt_helper<char>::parse(boost::any&,
> std::vector<std::string, std::allocator<std::string> > const&, bool)
> const'
> ./src/icfapp.o:(.rodata._ZTVN5boost15program_options11typed_valueIjcEE[_ZTVN5boost15program_options11typed_valueIjcEE]+0x38):
> undefined reference to
> `boost::program_options::value_semantic_codecvt_helper<char>::parse(boost::any&,
> std::vector<std::string, std::allocator<std::string> > const&, bool)
> const'
> ./src/icfapp.o:(.rodata._ZTVN5boost15program_options11typed_valueISscEE[_ZTVN5boost15program_options11typed_valueISscEE]+0x38):
> undefined reference to
> `boost::program_options::value_semantic_codecvt_helper<char>::parse(boost::any&,
> std::vector<std::string, std::allocator<std::string> > const&, bool)
> const'
> ./src/icfapp.o:(.rodata._ZTVN5boost15program_options20invalid_option_valueE[_ZTVN5boost15program_options20invalid_option_valueE]+0x30):
> undefined reference to
> `boost::program_options::error_with_option_name::substitute_placeholders(std::string
> const&) const'
> ./src/icfapp.o:(.rodata._ZTVN5boost15program_options16validation_errorE[_ZTVN5boost15program_options16validation_errorE]+0x30):
> undefined reference to
> `boost::program_options::error_with_option_name::substitute_placeholders(std::string
> const&) const' ./src/icfapp.o: In function
> `boost::program_options::typed_value<long, char>::name() const':
> /usr/include/boost/program_options/detail/value_semantic.hpp:19:
> undefined reference to `boost::program_options::arg' ./src/icfapp.o:
> In function `boost::program_options::typed_value<unsigned int,
> char>::name() const':
> /usr/include/boost/program_options/detail/value_semantic.hpp:19:
> undefined reference to `boost::program_options::arg' ./src/icfapp.o:
> In function `boost::program_options::typed_value<std::string,
> char>::name() const':
> /usr/include/boost/program_options/detail/value_semantic.hpp:19:
> undefined reference to `boost::program_options::arg' ./src/icfapp.o:
> In function `boost::program_options::typed_value<std::string,
> char>::xparse(boost::any&, std::vector<std::string,
> std::allocator<std::string> > const&) const':
> /usr/include/boost/program_options/detail/value_semantic.hpp:167:
> undefined reference to `boost::program_options::validate(boost::any&,
> std::vector<std::string, std::allocator<std::string> > const&,
> std::string*, int)' ./src/icfapp.o: In function `void
> boost::program_options::validate<long, char>(boost::any&,
> std::vector<std::basic_string<char, std::char_traits<char>,
> std::allocator<char> >, std::allocator<std::basic_string<char,
> std::char_traits<char>, std::allocator<char> > > > const&, long*,
> long)':
> /usr/include/boost/program_options/detail/value_semantic.hpp:92:
> undefined reference to
> `boost::program_options::invalid_option_value::invalid_option_value(std::string
> const&)' ./src/icfapp.o: In function `void
> boost::program_options::validate<unsigned int, char>(boost::any&,
> std::vector<std::basic_string<char, std::char_traits<char>,
> std::allocator<char> >, std::allocator<std::basic_string<char,
> std::char_traits<char>, std::allocator<char> > > > const&, unsigned
> int*, long)':
> /usr/include/boost/program_options/detail/value_semantic.hpp:92:
> undefined reference to
> `boost::program_options::invalid_option_value::invalid_option_value(std::string
> const&)'
> ./src/icfapp.o:(.rodata._ZTVN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_15program_options16validation_errorEEEEE[_ZTVN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_15program_options16validation_errorEEEEE]+0x38):
> undefined reference to
> `boost::program_options::error_with_option_name::substitute_placeholders(std::string
> const&) const'
> ./src/icfapp.o:(.rodata._ZTVN5boost16exception_detail19error_info_injectorINS_15program_options16validation_errorEEE[_ZTVN5boost16exception_detail19error_info_injectorINS_15program_options16validation_errorEEE]+0x30):
> undefined reference to
> `boost::program_options::error_with_option_name::substitute_placeholders(std::string
> const&) const'
> ./src/icfapp.o:(.rodata._ZTVN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_15program_options20invalid_option_valueEEEEE[_ZTVN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_15program_options20invalid_option_valueEEEEE]+0x38): undefined reference to
> `boost::program_options::error_with_option_name::substitute_placeholders(std::string
> const&) const'
> ./src/icfapp.o:(.rodata._ZTVN5boost16exception_detail19error_info_injectorINS_15program_options20invalid_option_valueEEE[_ZTVN5boost16exception_detail19error_info_injectorINS_15program_options20invalid_option_valueEEE]+0x30):
> undefined reference to
> `boost::program_options::error_with_option_name::substitute_placeholders(std::string
> const&) const' /home/peter/workspace/icflib/Debug/libicflib.a(DBO.o):
> In function `unsigned short
> boost::date_time::month_str_to_ushort<boost::gregorian::greg_month>(std::string
> const&)': /usr/include/boost/date_time/date_parsing.hpp:67: undefined
> reference to `boost::gregorian::greg_month::get_month_map_ptr()'
> collect2: error: ld returned 1 exit status
static:
g++ -L"/home/peter/workspace/icflib/Release" -pthread -Wl,--no-as-needed -o "icfapp" ./src/AdminModule.o ./src/CaptureModule.o ./src/FFTModule.o ./src/GPSModule.o ./src/ReportModule.o ./src/icfapp.o /home/peter/workspace/icflib/Release/libicflib.a /usr/lib/x86_64-linux-gnu/libboost_program_options.a /usr/lib/x86_64-linux-gnu/libboost_date_time.a /usr/lib/x86_64-linux-gnu/libboost_filesystem.a /usr/lib/x86_64-linux-gnu/libboost_system.a -lfftw3 -lmysqlcppconn -lmysqlclient
./src/FFTModule.o: In function `getLTETxtFiles(dboFlightConfig&)':
FFTModule.cpp:(.text+0x1146): undefined reference to `boost::filesystem::path_traits::dispatch(boost::filesystem::directory_entry const&, std::string&)'
./src/FFTModule.o: In function `FFTModule::scanDir(ICFSocket*)':
FFTModule.cpp:(.text+0xe95c): undefined reference to `boost::filesystem::path_traits::dispatch(boost::filesystem::directory_entry const&, std::string&)'
./src/icfapp.o: In function `processCommandLine(int, char**)':
SNIPPED...
Is there something different in boost 1.58 that I need to set different compile flags?
Make sure you compile everything with the same compiler & flags.
This means you need clean the build(s) and use the same compiler that was used to build the packaged version of boost (note that gcc will also have been updated as part of the dist-upgrade).
Any changes to ABI or (implicit) preprocessor directives can lead the header files to emit different (effective) declarations, and violate the ODR.
What's worse than getting the linker error is that you might actually have gotten Undefined Behaviour silently.
This question already has answers here:
Is gcc 4.8 or earlier buggy about regular expressions?
(3 answers)
Closed 9 years ago.
I've been playing with regex in C++ but ran into some errors:
Here is my script
#include <iostream>
#include <regex>
using namespace std;
string input(string prompt)
{
cout << prompt;
string str;
cin >> str;
return str;
}
int main() {
string str;
while (true) {
str = input("Enter some text: ");
regex e("([:w:])+", regex_constants::icase);
bool match = regex_match(str, e);
cout << (match? "Matched" : "Not matched") << endl;
}
}
And when I compile it and run (g++ -std=c++11 test.cpp && ./a.out), I get the following error:
Enter some text: abcde
terminate called after throwing an instance of 'std::regex_error'
what(): regex_error
Aborted (core dumped)
What's causing it? And is there a way to fix it?
GCC version: gcc version 4.7.2 20121109 (Red Hat 4.7.2-8) (GCC)
OK. I tried boost.regex (with no luck).
You can find the file here: http://www.mitchr.me/SS/exampleCode/boost/regexExample1.cpp.html
And here is the output from g++ test.cpp && ./a.out:
/tmp/ccq38Rqf.o: In function `char boost::re_detail::global_lower<char>(char)':
test.cpp:(.text._ZN5boost9re_detail12global_lowerIcEET_S2_[_ZN5boost9re_detail12global_lowerIcEET_S2_]+0x14): undefined reference to `boost::re_detail::do_global_lower(char)'
/tmp/ccq38Rqf.o: In function `char boost::re_detail::global_upper<char>(char)':
test.cpp:(.text._ZN5boost9re_detail12global_upperIcEET_S2_[_ZN5boost9re_detail12global_upperIcEET_S2_]+0x14): undefined reference to `boost::re_detail::do_global_upper(char)'
/tmp/ccq38Rqf.o: In function `bool boost::regex_match<char const*, std::allocator<boost::sub_match<char const*> >, char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >(char const*, char const*, boost::match_results<char const*, std::allocator<boost::sub_match<char const*> > >&, boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags)':
test.cpp:(.text._ZN5boost11regex_matchIPKcSaINS_9sub_matchIS2_EEEcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEEbT_SA_RNS_13match_resultsISA_T0_EERKNS_11basic_regexIT1_T2_EENS_15regex_constants12_match_flagsE[_ZN5boost11regex_matchIPKcSaINS_9sub_matchIS2_EEEcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEEbT_SA_RNS_13match_resultsISA_T0_EERKNS_11basic_regexIT1_T2_EENS_15regex_constants12_match_flagsE]+0x77): undefined reference to `boost::re_detail::perl_matcher<char const*, std::allocator<boost::sub_match<char const*> >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::match()'
/tmp/ccq38Rqf.o: In function `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::assign(char const*, char const*, unsigned int)':
test.cpp:(.text._ZN5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE6assignEPKcS7_j[_ZN5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE6assignEPKcS7_j]+0x2a): undefined reference to `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::do_assign(char const*, char const*, unsigned int)'
/tmp/ccq38Rqf.o: In function `boost::re_detail::perl_matcher<char const*, std::allocator<boost::sub_match<char const*> >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::perl_matcher(char const*, char const*, boost::match_results<char const*, std::allocator<boost::sub_match<char const*> > >&, boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags, char const*)':
test.cpp:(.text._ZN5boost9re_detail12perl_matcherIPKcSaINS_9sub_matchIS3_EEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEC2ES3_S3_RNS_13match_resultsIS3_S6_EERKNS_11basic_regexIcSA_EENS_15regex_constants12_match_flagsES3_[_ZN5boost9re_detail12perl_matcherIPKcSaINS_9sub_matchIS3_EEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEC5ES3_S3_RNS_13match_resultsIS3_S6_EERKNS_11basic_regexIcSA_EENS_15regex_constants12_match_flagsES3_]+0xf6): undefined reference to `boost::re_detail::perl_matcher<char const*, std::allocator<boost::sub_match<char const*> >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::construct_init(boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags)'
/tmp/ccq38Rqf.o: In function `bool boost::regex_search<char const*, std::allocator<boost::sub_match<char const*> >, char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >(char const*, char const*, boost::match_results<char const*, std::allocator<boost::sub_match<char const*> > >&, boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags, char const*)':
test.cpp:(.text._ZN5boost12regex_searchIPKcSaINS_9sub_matchIS2_EEEcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEEbT_SA_RNS_13match_resultsISA_T0_EERKNS_11basic_regexIT1_T2_EENS_15regex_constants12_match_flagsESA_[_ZN5boost12regex_searchIPKcSaINS_9sub_matchIS2_EEEcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEEbT_SA_RNS_13match_resultsISA_T0_EERKNS_11basic_regexIT1_T2_EENS_15regex_constants12_match_flagsESA_]+0xa2): undefined reference to `boost::re_detail::perl_matcher<char const*, std::allocator<boost::sub_match<char const*> >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::find()'
/tmp/ccq38Rqf.o: In function `bool boost::regex_search<__gnu_cxx::__normal_iterator<char const*, std::string>, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::string> > >, char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >(__gnu_cxx::__normal_iterator<char const*, std::string>, __gnu_cxx::__normal_iterator<char const*, std::string>, boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::string>, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::string> > > >&, boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags, __gnu_cxx::__normal_iterator<char const*, std::string>)':
test.cpp:(.text._ZN5boost12regex_searchIN9__gnu_cxx17__normal_iteratorIPKcSsEESaINS_9sub_matchIS5_EEEcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEEbT_SD_RNS_13match_resultsISD_T0_EERKNS_11basic_regexIT1_T2_EENS_15regex_constants12_match_flagsESD_[_ZN5boost12regex_searchIN9__gnu_cxx17__normal_iteratorIPKcSsEESaINS_9sub_matchIS5_EEEcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEEbT_SD_RNS_13match_resultsISD_T0_EERKNS_11basic_regexIT1_T2_EENS_15regex_constants12_match_flagsESD_]+0xa2): undefined reference to `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::string>, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::string> > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::find()'
/tmp/ccq38Rqf.o: In function `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::string>, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::string> > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::perl_matcher(__gnu_cxx::__normal_iterator<char const*, std::string>, __gnu_cxx::__normal_iterator<char const*, std::string>, boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::string>, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::string> > > >&, boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags, __gnu_cxx::__normal_iterator<char const*, std::string>)':
test.cpp:(.text._ZN5boost9re_detail12perl_matcherIN9__gnu_cxx17__normal_iteratorIPKcSsEESaINS_9sub_matchIS6_EEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEC2ES6_S6_RNS_13match_resultsIS6_S9_EERKNS_11basic_regexIcSD_EENS_15regex_constants12_match_flagsES6_[_ZN5boost9re_detail12perl_matcherIN9__gnu_cxx17__normal_iteratorIPKcSsEESaINS_9sub_matchIS6_EEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEC5ES6_S6_RNS_13match_resultsIS6_S9_EERKNS_11basic_regexIcSD_EENS_15regex_constants12_match_flagsES6_]+0x116): undefined reference to `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::string>, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::string> > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::construct_init(boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags)'
/tmp/ccq38Rqf.o: In function `boost::re_detail::basic_regex_formatter<boost::re_detail::string_out_iterator<std::string>, boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::string>, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::string> > > >, boost::regex_traits_wrapper<boost::regex_traits<char, boost::cpp_regex_traits<char> > >, char const*>::toi(char const*&, char const*, int, mpl_::bool_<true> const&)':
test.cpp:(.text._ZN5boost9re_detail21basic_regex_formatterINS0_19string_out_iteratorISsEENS_13match_resultsIN9__gnu_cxx17__normal_iteratorIPKcSsEESaINS_9sub_matchIS9_EEEEENS_20regex_traits_wrapperINS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEES8_E3toiERS8_S8_iRKN4mpl_5bool_ILb1EEE[_ZN5boost9re_detail21basic_regex_formatterINS0_19string_out_iteratorISsEENS_13match_resultsIN9__gnu_cxx17__normal_iteratorIPKcSsEESaINS_9sub_matchIS9_EEEEENS_20regex_traits_wrapperINS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEES8_E3toiERS8_S8_iRKN4mpl_5bool_ILb1EEE]+0x31): undefined reference to `boost::cpp_regex_traits<char>::toi(char const*&, char const*, int) const'
collect2: error: ld returned 1 exit status
<regex> was not implemented in GCC (although some of its functions would compile without warnings) until just a few months ago: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53631#c17
To experiment with TR1/C++11 regular expressions, you need to use boost.regex, gcc 4.9, or another standard library implementation (e.g. libc++)
I have written a class using std::tr1::regex, and I don't know how to link it. I get (sorry for the large dump...) :
$ g++ DictReader.cpp -std=c++0x
/usr/include/c++/4.4/tr1_impl/regex:2255: warning: inline function ‘bool std::tr1::regex_search(_Bi_iter, _Bi_iter, std::tr1::match_results<_Bi_iter, _Allocator>&, const std::tr1::basic_regex<_Ch_type, _Rx_traits>&, std::tr1::regex_constants::match_flag_type) [with _Bi_iter = __gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, _Allocator = std::allocator<std::tr1::sub_match<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, _Ch_type = char, _Rx_traits = std::tr1::regex_traits<char>]’ used but never defined
/usr/lib/gcc/x86_64-linux-gnu/4.4.1/../../../../lib/crt1.o: In function `_start':
/build/buildd/eglibc-2.10.1/csu/../sysdeps/x86_64/elf/start.S:109: undefined reference to `main'
/tmp/ccgBkWlK.o: In function `DictReader::operator++(int)':
DictReader.cpp:(.text+0xb2a): undefined reference to `bool std::tr1::regex_search<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::tr1::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, char, std::tr1::regex_traits<char> >(__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::tr1::match_results<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::tr1::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >&, std::tr1::basic_regex<char, std::tr1::regex_traits<char> > const&, std::bitset<11ul>)'
/tmp/ccgBkWlK.o: In function `std::tr1::basic_regex<char, std::tr1::regex_traits<char> >::basic_regex(char const*, unsigned int)':
DictReader.cpp:(.text._ZNSt3tr111basic_regexIcNS_12regex_traitsIcEEEC1EPKcj[std::tr1::basic_regex<char, std::tr1::regex_traits<char> >::basic_regex(char const*, unsigned int)]+0x75): undefined reference to `std::tr1::basic_regex<char, std::tr1::regex_traits<char> >::_M_compile()'
/tmp/ccgBkWlK.o: In function `std::tr1::basic_regex<char, std::tr1::regex_traits<char> >::basic_regex(std::tr1::basic_regex<char, std::tr1::regex_traits<char> > const&)':
DictReader.cpp:(.text._ZNSt3tr111basic_regexIcNS_12regex_traitsIcEEEC1ERKS3_[std::tr1::basic_regex<char, std::tr1::regex_traits<char> >::basic_regex(std::tr1::basic_regex<char, std::tr1::regex_traits<char> > const&)]+0x60): undefined reference to `std::tr1::basic_regex<char, std::tr1::regex_traits<char> >::_M_compile()'
collect2: ld returned 1 exit status.
What should I link against?
This is a linker error, it does not found the function you are using. TR1 is still new so it may not be implemented everywhere. I recommend you to use the boost regex library instead.