Problèmes avec la bibliothèque Eigen et c ++ éditeur de liens
Question
J'essaie de lier mon application C ++ avec la bibliothèque "Eigen 2.0.15". Quelques détails:
- Mon compilateur est: gcc version 4.0.1 (Apple Inc. build 5493)
- Mon OS est: mac os 10.5
-
Je compile le code avec 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
L'erreur est:
`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`
Est-ce que quelqu'un a une idée pourquoi l'éditeur de liens échoue?
La solution
En regardant les messages d'erreur, je suppose que vous n'instancier Matrix, Transform et éventuellement d'autres modèles. Cela est arrivé sans doute parce que les fichiers d'en-tête ne contenaient pas mise en œuvre de ces modèles, ou peut-être il y a une compilation conditionnelle qui est censé tirer vers le haut la mise en œuvre pour eux.