Eigen库和C++链接器的问题

5
我尝试将我的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 ...编译代码。 - 构建目标为LBRALL,调用MacOS X C++链接器,命令为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`

有人知道为什么链接器失败吗?

1
根据 http://eigen.tuxfamily.org/index.php?title=Main_Page ,"没有需要链接的库...Eigen是一个在头文件中定义的纯模板库。" - Jason Orendorff
1个回答

2

从错误信息来看,我猜测您没有实例化Matrix、Transform和可能的其他模板。这可能是因为头文件中没有包含这些模板的实现,或者可能有一个条件编译,应该为它们提供实现。


8
无法找到符号,因为 MatrixBase::inverse 方法被定义在 Eigen::LU 类中。包含 <Eigen/LU> 可以解决这个问题。 - nutario

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接