Проблемы с ускорением при компиляции библиотеки Point Cloud

Я пытаюсь скомпилировать библиотеку Point Cloud из исходного кода в OSX 10.6.8, и продолжаю сталкиваться с той же ошибкой с библиотеками Boost:

! 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

Я просмотрел параметры CMake, и ни один из них, похоже, не ссылается на библиотеку Boost с активированными расширенными настройками, я обнаружил, что файлы моей библиотеки boost находятся в /usr/lib/; например /usr/lib/libboost_date_time-mt.dylib:

введите описание изображения здесь

Что я могу сделать, чтобы решить эту проблему? И что я могу сделать в будущем, чтобы предотвратить повторение подобных проблем?


ОБНОВЛЕНИЕ Я перестроил и скомпилировал Boost с нуля, но все еще получаю ту же ошибку. Это кажется очень странным, поскольку Boost компилируется с нуля, как и PCL. Единственное, на что следует обратить внимание, это в выводе CMake, я получаю это странное противоречивое сообщение:

-- checking for module 'eigen3'
--   package 'eigen3' not found
-- Eigen found (include: /usr/local/include/eigen3)

person Bill Cheatham    schedule 08.05.2013    source источник
comment
Возможно, вы установили boost, не создавая библиотеки boost. Значительное усиление можно использовать только через файлы заголовков, но для некоторых функций требуются библиотеки, которые необходимо создавать явно. Поищите библиотеки libboost_ * (например, libboost_thread) в каталоге вашей ускоренной установки, чтобы узнать, существуют ли они.   -  person Andy    schedule 09.05.2013
comment
Хорошо, спасибо, в /usr/lib у меня есть, среди прочего, libboost_thread-mt.a и libboost_thread-mt.dylib. Файл dylib упоминается в CMake (см. Отредактированный вопрос). Сейчас я переустанавливаю Boost, чтобы посмотреть, улучшит ли это ситуацию.   -  person Bill Cheatham    schedule 09.05.2013
comment
Внимание: не используйте тег [PCL]. Это не связано с библиотекой облаков точек.   -  person Bart    schedule 09.05.2013
comment
AFAIK, эта ошибка не имеет ничего общего с Eigen. Единственное, что вы можете сделать, - это запустить make в подробном режиме, чтобы увидеть, где компоновщик ищет ваши библиотеки: В приглашении оболочки напишите: VERBOSE = 1 make   -  person D.J.Duff    schedule 10.05.2013


Ответы (1)


Это проблема "более старой версии наддува"?

Возможно, компоновщик ищет функции, которые существуют только в более новой версии boost, чем та, которую вы создали и установили.

Дважды проверьте, какая версия повышения рекомендована библиотекой Point Cloud и какая у вас версия повышения.

person DLRdave    schedule 20.09.2013