既存のプロジェクトの前提条件として、Brewを使用したEigenとCeres-Solverの両方をインストールしました。 (3.3.1)EigenとCeres-Solverのバージョンを一致させる最も簡単な方法は何ですか?
私はプロジェクトのためにmakeを実行すると、私は次のようなメッセージ
を取得するには、固有の依存関係を見つけましたが、固有のバージョンが見つかりました。 は正確に固有セレスのバージョンがコンパイルされた一致しません。 (3.3.0)。これは、 1定義ルールの違反を引き起こすことによって微妙なバグを引き起こす可能性があります。詳細
私の最初のアイデアは、醸造から固有値を使用して、ソースからのセレス・ソルバーをコンパイルしたが、これは、メイク中に他のエラーメッセージを生成するためにWikipediaの記事 http://en.wikipedia.org/wiki/One_Definition_Ruleを参照してください。
具体的には、いくつかの行をスキップ... 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は固有3.2.2以降をお勧めしますので、3.3 3.2と3.3の間に構造的な変更がなければ、.1はうまくいくはずです。
私の質問:
私が試してみてください次のステップは何ですか? Eigenの古いバージョンをインストールしますか?
まあ、あなたは明確な警告を受け取ります。あなたに何を伝えたいと思いますか? 「いいえ、そのソフトウェアの開発者は、ソフトウェアの仕組みが分かりませんでしたか? –
オピイ・フェア・ポイント。最初の質問に対する答えは「いいえ」と思っていましたが、次に試してみたいことについてはちょっと困っています。 – Cecilia