匹配 Eigen 和 Ceres-Solver 版本的最简单方法是什么?

What is the simplest way to match the versions for Eigen and Ceres-Solver?

我使用 brew 安装了 Eigen 和 Ceres-Solver 作为现有项目的先决条件。

当我 运行 为项目制作时,我收到以下消息

Found Eigen dependency, but the version of Eigen found (3.3.1) does not exactly match the version of Eigen Ceres was compiled with (3.3.0). This can cause subtle bugs by triggering violations of the One Definition Rule. See the Wikipedia article http://en.wikipedia.org/wiki/One_Definition_Rule for more details

我的第一个想法是使用来自 brew 的 Eigen 从源代码编译 Ceres-solver,但这在 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 installation page推荐Eigen 3.2.2或更高版本,所以3.3.1应该没问题,除非3.2和3.3之间有一些结构上的变化。

我的问题:

下一步我应该尝试什么?安装旧版本的 Eigen?

我正在尝试使用 the instructions on the ceres website 从源代码构建 ceres。我仍然不确定为什么会失败,但是使用 brew(我以前不知道存在的选项)从源代码构建是可行的。

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

它使用通过 brew (Eigen 3.3.1) 安装的 Eigen 依赖项,不会产生任何错误消息。