问题
I am trying to compile the Point Cloud Library from source on OSX 10.6.8, and I keep running up against the same error with the Boost libraries:
! make
Linking CXX shared library ../lib/libpcl_common.dylib
Undefined symbols:
"boost::thread::start_thread_noexcept()", referenced from:
boost::thread::thread<boost::_bi::bind_t<void, boost::_mfi::mf0<void,
pcl::TimeTrigger>, boost::_bi::list1<boost::_bi::value<pcl::TimeTrigger*> > > >(boost::_bi::bind_t<void, boost::_mfi::mf0<void, pcl::TimeTrigger>, boost::_bi::list1<boost::_bi::value<pcl::TimeTrigger*> > >, boost::disable_if_c<boost::thread_detail::is_convertible<boost::_bi::bind_t<void, boost::_mfi::mf0<void, pcl::TimeTrigger>, boost::_bi::list1<boost::_bi::value<pcl::TimeTrigger*> > >&, boost::detail::thread_move_t<boost::_bi::bind_t<void, boost::_mfi::mf0<void, pcl::TimeTrigger>, boost::_bi::list1<boost::_bi::value<pcl::TimeTrigger*> > > > >::value, boost::thread::dummy*>::type)in time_trigger.cpp.o
"boost::thread::join_noexcept()", referenced from:
pcl::TimeTrigger::~TimeTrigger()in time_trigger.cpp.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make[2]: *** [lib/libpcl_common.1.7.0.dylib] Error 1
make[1]: *** [common/CMakeFiles/pcl_common.dir/all] Error 2
make: *** [all] Error 2
I have looked through the CMake options, and none of them seem to reference the Boost library with advanced settings activated, I find that my boost library files are located in /usr/lib/
; e.g. /usr/lib/libboost_date_time-mt.dylib
:
What can I do to solve this problem? And what can I do in the future to help prevent similar problems occurring again?
UPDATE I have rebuilt and compiled Boost from scratch, and am still getting the same error. This seems very odd, as Boost is compiled from scratch and PCL is too. The only thing which could be of note is in the CMake output, I get this strange conflicting message:
-- checking for module 'eigen3'
-- package 'eigen3' not found
-- Eigen found (include: /usr/local/include/eigen3)
回答1:
Is this an "older version of boost" problem?
Perhaps the linker is looking for functions that only exist in a newer version of boost than the one you have built and installed.
Double check what version of boost is recommended by the Point Cloud Library, and what version of boost you have.
来源:https://stackoverflow.com/questions/16449887/boost-problems-when-compiling-point-cloud-library