質問

C ++アプリケーションを「Eigen 2.0.15」ライブラリにリンクしようとしています。いくつかの詳細:

  • 私のコンパイラは:GCCバージョン4.0.1(Apple Inc. Build 5493)
  • 私のOSは:Mac OS 10.5です
  • g ++ -i/opt/local/include -i/opt/local/include/eigen2 -o2 -gでコードをコンパイルします。

    Building target: LBRALL Invoking: MacOS X C++ Linker g++ -L/opt/local/lib -o "LBRALL" [... *.o -files ] -lcv -lEigen2 -lcxcore -lhighgui

エラーは次のとおりです。

`Undefined symbols:
"Eigen::MatrixBase<Eigen::Block<Eigen::Matrix<float, 4, 4, 2, 4, 4>, 3, 3, 1, 32>    >::inverse() const", referenced from:
  Eigen::Transform<float, 3>::inverse(Eigen::TransformTraits) constin LBRSendStateCart.o
  Eigen::Transform<float, 3>::inverse(Eigen::TransformTraits) constin LBRCam.o
"Eigen::MatrixBase<Eigen::Matrix<float, 4, 4, 2, 4, 4> >::inverse() const", referenced from:
  Eigen::Transform<float, 3>::inverse(Eigen::TransformTraits) constin LBRSendStateCart.o
  Eigen::Transform<float, 3>::inverse(Eigen::TransformTraits) constin LBRCam.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [LBRALL] Error 1`

なぜリンカーが失敗するのかという考えがありますか?

役に立ちましたか?

解決

エラーメッセージを見ると、マトリックス、変換、場合によっては他のテンプレートをインスタンス化しなかったと思います。おそらく、ヘッダーファイルにこれらのテンプレートの実装が含まれていないか、またはそれらの実装を引き上げることになっている条件付きコンパイルがあるかもしれないために起こったでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top