Forum Programmation.c++ OpenMesh

Posté par  .
Étiquettes : aucune
0
2
avr.
2007
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  . Évalué à 1.


    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 `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'


    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 ?


    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()'


    Ça paraît plutôt clair, il ne trouve pas omerr().
    • [^] # Re: OpenMesh

      Posté par  . Évalué à 1.

      En fait, je n'avais pas compile mon repertoire avant de l'utiliser. Il faut d'abord compiler openmesh avec acgmake. Ensuite, on peut utiliser les bibliotheques crees dans un programme. Cela dit maintenant, je n'arrive justement pas a compiler openmesh avec acgmake! J'ai l'erreur suivante:

      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  . Évalué à 2.

        Vous pouvez donner la sortie complète ? Il doit y avoir une erreur plus haut.

        Chez moi ça marche :


        ...
        Building global library -> Debian64_gcc4.0_dbg/libOpenMesh_Tools.so

        make[1]: quittant le répertoire « /tmp/OpenMesh/Tools »
        make[1]: entrant dans le répertoire « /tmp/OpenMesh/Apps »
        make[2]: entrant dans le répertoire « /tmp/OpenMesh/Apps/mconvert »

        Compile mconvert.cc -> Debian64_gcc4.0_dbg/mconvert.o

        Build executable Debian64_gcc4.0_dbg/mconvert.o -> Debian64_gcc4.0_dbg/mconvert

        make[2]: quittant le répertoire « /tmp/OpenMesh/Apps/mconvert »
        ...
        • [^] # Re: OpenMesh

          Posté par  . Évalué à 1.

          Bonjour,

          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  . Évalué à 1.

            Bonjour,

            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.