2010-12-10 3 views
4

Я пытаюсь связать свое приложение C++ с библиотекой «Eigen 2.0.15». Некоторые детали:Проблемы с собственной библиотекой и компоновщиком C++

  • Мой компилятор: GCC версии 4.0.1 (Apple Inc. построить 5493)
  • Моя ОС: Mac OS 10.5
  • компилировать код с г ++ -I/неавтоматического/местные/включают -I/Opt/местные/включить/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` 

У кого-нибудь есть идея, почему линкер не работает?

+1

Согласно http://eigen.tuxfamily.org/index.php?title=Main_Page, «Нет библиотеки для ссылки на ... Eigen - это чистая библиотека шаблонов, определенная в заголовках». – 2010-12-10 15:30:31

ответ

2

Рассматривая сообщения об ошибках, я предполагаю, что вы не создали экземпляр Matrix, Transform и, возможно, другие шаблоны. Это произошло, вероятно, из-за того, что в файлах заголовков не было реализации этих шаблонов, или, может быть, есть условная компиляция, которая должна поднять реализацию для них.

+2

Символы не могут быть найдены, потому что `MatrixBase :: inverse`methode дефинируется в классе` Eigen :: LU`. включая `` исправляет проблему. – nutario 2010-12-30 08:59:07

Смежные вопросы