【问题标题】:Problems with Eigen library and c++ linkerEigen 库和 C++ 链接器的问题
【发布时间】:2011-05-23 13:05:08
【问题描述】:

我尝试将我的 c++ 应用程序与“Eigen 2.0.15”库链接起来。 一些细节:

  • 我的编译器是:gcc 版本 4.0.1(Apple Inc. build 5493)
  • 我的操作系统是: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`

有人知道链接器失败的原因吗?

【问题讨论】:

标签: c++ macos gcc linker eigen


【解决方案1】:

查看错误消息,我猜您没有实例化 Matrix、Transform 和可能的其他模板。发生这种情况可能是因为头文件不包含这些模板的实现,或者可能有一个条件编译应该为它们提取实现。

【讨论】:

  • 找不到符号,因为MatrixBase::inverse方法是在Eigen::LU类中定义的。包含&lt;Eigen/LU&gt; 可以解决问题。
猜你喜欢
  • 1970-01-01
  • 2019-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多