Какой самый простой способ сопоставить версии для Eigen и Ceres-Solver?

Я установил Eigen и Ceres-Solver вместе с brew в качестве предварительных условий для существующего проекта.

Когда я запускаю make для проекта, я получаю следующее сообщение

Найденная зависимость Eigen, но найденная версия Eigen (3.3.1)
не совсем соответствует версии Eigen Ceres был скомпилирован с
(3.3.0). Это может вызвать незначительные ошибки, вызывая нарушения
Одно Правило Определения. Смотрите статью в Википедии
http://en.wikipedia.org/wiki/One_Definition_Rule Больше подробностей

Моя первая идея состояла в том, чтобы скомпилировать Ceres-solver из исходного кода, используя Eigen from brew, но это привело к появлению других сообщений об ошибках во время make.

В частности, он создает до 54%, а затем печатает

[ 54%] Linking C executable ../bin/curve_fitting_c
Undefined symbols for architecture x86_64:
"___kmpc_atomic_fixed4_sub", referenced from:
__ZN5Eigen8internal29general_matrix_matrix_productIldLi1ELb0EdLi1ELb0ELi0EE3runElllPKdlS4_lPdldRNS0_15level3_blockingIddEEPNS0_16GemmParallelInfoIlEE in libceres.a(gradient_checker.cc.o)
__ZN5Eigen8internal29general_matrix_matrix_productIldLi1ELb0EdLi0ELb0ELi0EE3runElllPKdlS4_lPdldRNS0_15level3_blockingIddEEPNS0_16GemmParallelInfoIlEE in libceres.a(dogleg_strategy.cc.o)

__ZN5ceres8internal11EventLoggerC2ERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE in libceres.a(wall_time.cc.o)
__ZN5ceres8internal11EventLoggerC1ERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE in libceres.a(wall_time.cc.o)
__ZN5ceres8internal11EventLoggerD2Ev in libceres.a(wall_time.cc.o)

… Пропустив несколько строк …

    __ZN5ceres8internal11EventLogger8AddEventERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE in libceres.a(wall_time.cc.o)
ld: symbol(s) not found for architecture x86_64
clang-3.5: error: linker command failed with exit code 1 (use -v to see invocation)

страница установки ceres рекомендует Eigen 3.2.2 или новее, поэтому с 3.3.1 должно быть все в порядке, если не было каких-либо структурных изменений между 3.2 и 3.3.

Мой вопрос:

Какой следующий шаг я должен попробовать? Установка более старой версии Eigen?

0

Решение

Я пытался построить Ceres из источника, используя инструкции на сайте ceres. Я до сих пор не уверен, почему это не удалось, но сборка из исходного кода с использованием brew (опция, о которой я раньше не знал, существует) работает.

brew install --build-from-source ceres-solver

Он использует зависимость Eigen, установленную через brew (Eigen 3.3.1), и не выдает никаких сообщений об ошибках.

1

Другие решения

Других решений пока нет …