Bonjour,
J'ai besoin d'utiliser la librairie OpenMesh mais j'ai des problemes de compilation. Mon programme ne contient aucune erreur et un fichier .o est cree mais pas le fichier .exe. Dans la console, j'ai ce message:
make -k all
g++ -o open.exe open.o
open.o: In function `OpenMesh::BaseProperty::~BaseProperty()':
open.cpp:(.text._ZN8OpenMesh12BasePropertyD2Ev[OpenMesh::BaseProperty::~BaseProperty()]+0x7): undefined reference to `vtable for OpenMesh::BaseProperty'
open.o: In function `void OpenMesh::BaseProperty::check_and_set_persistent<OpenMesh::VectorT<float, 3> >(bool)':
open.cpp:(.text._ZN8OpenMesh12BaseProperty24check_and_set_persistentINS_7VectorTIfLi3EEEEEvb[void OpenMesh::BaseProperty::check_and_set_persistent<OpenMesh::VectorT<float, 3> >(bool)]+0x39): undefined reference to `omerr()'
open.o: In function `OpenMesh::BaseProperty::BaseProperty(OpenMesh::BaseProperty const&)':
open.cpp:(.text._ZN8OpenMesh12BasePropertyC2ERKS0_[OpenMesh::BaseProperty::BaseProperty(OpenMesh::BaseProperty const&)]+0x7): undefined reference to `vtable for OpenMesh::BaseProperty'
open.o: In function `OpenMesh::BaseProperty::BaseProperty(std::basic_string<char, std::char_traits, std::allocator > const&)':
open.cpp:(.text._ZN8OpenMesh12BasePropertyC2ERKSs[OpenMesh::BaseProperty::BaseProperty(std::basic_string<char, std::char_traits, std::allocator > const&)]+0x7): undefined reference to `vtable for OpenMesh::BaseProperty'
open.o:(.rodata._ZTVN8OpenMesh9PropertyTINS_7VectorTIfLi3EEEEE[vtable for OpenMesh::PropertyT<OpenMesh::VectorT<float, 3> >]+0x28): undefined reference to `OpenMesh::BaseProperty::stats(std::basic_ostream<char, std::char_traits >&) const'
open.o:(.rodata._ZTIN8OpenMesh9PropertyTINS_7VectorTIfLi3EEEEE[typeinfo for OpenMesh::PropertyT<OpenMesh::VectorT<float, 3> >]+0x8): undefined reference to `typeinfo for OpenMesh::BaseProperty'
collect2: ld returned 1 exit status
make: *** [open.exe] Error 1
make: Target `all' not remade because of errors.
Je ne comprends pas d'ou provenir le probleme. Pouvez-vous m'aider? Merci.
# Re: OpenMesh
Posté par Vincent ORDY . Évalué à 1.
Vous n'avez pas défini toutes les fonctions déclarées dans BaseProperty. Vérifiez qu'il y a bien le code pour les constructeurs, le destructeur, et la fonction OpenMesh::BaseProperty::stats(std::basic_ostream<char, std::char_traits >&) const
Par hasard, vous n'essayeriez pas d'utiliser une classe abstraite ?
Ça paraît plutôt clair, il ne trouve pas omerr().
[^] # Re: OpenMesh
Posté par jp_soft . Évalué à 1.
Build executable Linux_gcc4.1_dbg/mconvert.o -> Linux_gcc4.1_dbg/mconvert
/usr/bin/ld: cannot find -lOpenMesh_Tools
collect2: ld returned 1 exit status
make[3]: *** [Linux_gcc4.1_dbg/mconvert] Error 1
make[2]: *** [local-build] Error 2
make[2]: Leaving directory `/OpenMesh/Apps/mconvert'
make[1]: *** [subdir-build] Error 1
make[1]: Leaving directory `/OpenMesh/Apps'
make: *** [subdir-build] Error 1
[root@localhost OpenMesh]#
Si quelqu'un a une idee? Merci
[^] # Re: OpenMesh
Posté par Vincent ORDY . Évalué à 2.
Chez moi ça marche :
[^] # Re: OpenMesh
Posté par jp_soft . Évalué à 1.
En fait, je n'ai pas compile OpenMesh avant de m'en servir. D'ailleurs, je n'arrive pas a l'installer. Il me dit qu'il ne trouve pas le fichier -lqt-mt dans /usr/bin/ld. Je ne sais pas comment je dois declarer la variable pour qu'il le trouve car je sais que j'ai la librairie libqt-mt dans qt-devel que j'ai installe. J'ai essaye -L/usr/lib/qt3/lib et -Wl,-R/usr/lib/qt3/lib mais ces options ne sont pas reconnues par acgmake. Pourriez-vous m'aider? Merci.
[^] # Re: OpenMesh
Posté par Vincent ORDY . Évalué à 1.
Dans acgmake, dans le fichier configs/config.Linux (prendre celui qui correspond à votre OS bien sûr), j'ai ceci :
QT_CFLAGS := -DQT_CLEAN_NAMESPACE -DQT_NO_COMPAT -DQT_THREAD_SUPPORT
QT_LIBS := qt-mt
QT_INCDIR := /usr/include/qt3
QT_LIBDIR := /usr/lib
MOC := /usr/bin/moc
UIC := /usr/bin/uic
Vous devriez donc pouvoir l'adapter à votre configuration.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.