Problemi con biblioteca Eigen e C ++ linker
Domanda
cerco di collegare la mia applicazione C ++ contro la libreria "Eigen 2.0.15". Alcuni dettagli:
- Il mio compilatore è: gcc la versione 4.0.1 (Apple Inc. di build 5493)
- Il mio sistema operativo è: Mac OS 10.5
-
I compilare il codice con 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'errore è:
`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`
Qualcuno ha un idea del perché il linker non riesce?
Soluzione
Guardando i messaggi di errore, la mia ipotesi ha non istanziare Matrix, Transform e forse altri modelli. Questo è successo probabilmente perché i file di intestazione non contengono attuazione di tali modelli, o forse c'è una compilazione condizionale che dovrebbe tirare l'attuazione per loro.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow