Probleme mit Eigen-Bibliothek und C ++ Linker
Frage
Ich versuche, meine c ++ Anwendung gegen die „Eigen 2.0.15“ Bibliothek zu verknüpfen. Einige Details:
- Mein Compiler: gcc Version 4.0.1 (Apple Inc. Build 5493)
- Mein OS ist: Mac OS 10.5
-
kompilieren ich den Code mit 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
Der Fehler ist:
`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`
Hat jemand eine Idee, warum die Linke versagt?
Lösung
Mit Blick auf den Fehlermeldungen, meine Vermutung du hast instanziiert nicht Matrix, Transformieren und möglicherweise auch andere Vorlagen. Das geschah vermutlich, weil die Header-Dateien nicht Umsetzung dieser Vorlagen enthalten haben, oder vielleicht gibt es eine bedingte Kompilierung, die angeblich Implementierung für sie ziehen.