Forum Programmation.c++ Wm4 WildMagic et MinGW

Posté par  .
Étiquettes : aucune
0
4
sept.
2009
Bonjour,
Je suis entrain de compiler un programme sous MinGW qui utilise Wm4.
Le programme marche bien sous linux gcc > 4 et Visual mais la j'ai un probleme de link.

c:\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\mingw32\bin\ld.exe: warni
ing has been activated without --enable-auto-import specified on the comman
This should work unless it involves constant data structures referencing sy
-imported DLLs.
CMakeFiles/OMKAddOn.dir/OSO/OMKTrajectory.obj:OMKTrajectory.cpp:(.text+0x24
eference to `Wm4::BSplineCurve3::Get(float, Wm4::Vector3*, Wm
t>*, Wm4::Vector3*, Wm4::Vector3*) const'
CMakeFiles/OMKAddOn.dir/OSO/OMKTrajectory.obj:OMKTrajectory.cpp:(.text+0x32
reference to `Wm4::BSplineCurve3::BSplineCurve3(int, Wm4::Vector3
t, bool, bool)'
collect2: ld returned 1 exit status

Donc on dirait qu'il n'instancie pas le template BezierCurve3 qui est explitement instancié à la fin du .cpp de Wm4BezierCurve3.cpp

Peut etre que tout ca est pas tres jolie mais je suppose qu'il a une option dans gcc qui peut etre n'est pas par defaut avec gcc 3.4.5 (celui de mingw) qui me manque et qui est present sous gcc > 4 et visual ?

Car j'ai bien le Wm4BezirCurve3.obj qui est crée.

Voilà si qq a une idée?

Merci
  • # une piste

    Posté par  . Évalué à 1.

    essaies avec gcc 3.4.5 sous linux, tu sauras ainsi si c'est dû au compilateur.

    P.S.:
    - mauvais copier/coller : on voit pas tous les messages
    - le warning te perturbe pas ?
    • [^] # Re: une piste

      Posté par  . Évalué à 1.

      Oui c'est le copier coller du terminal de mingw qui deconne.

      Et oui me perturbe mais j'ai pas encore trouver comment virer ce warning, meme en forcant le --enable-auto-import
      • [^] # Re: une piste

        Posté par  . Évalué à 3.

        tu sais ... tu donnes pas beaucoup d'info ... il y a pas de code ... comment peut-on t'aider ? Doit-on énumérer toutes les causes possibles ?

        as-tu écrit correctement ton template ? en voici un :

        MonTemplate.hpp
        -------------------------------------------------

        #ifndef TEMPLATE_H
        #define TEMPLATE_H

        #include <vector>

        template <class T>
        class MonTemplate : public std::vector<T>
        {
        public:
        MonTemplate();
        MonTemplate(int n);
        MonTemplate(int n, const T& t);
        MonTemplate(const MonTemplate<T>&v);
        MonTemplate(const std::vector <T> &v);
        ~MonTemplate();
        MonTemplate& operator<<(const T& right);
        MonTemplate& operator+=(const MonTemplate<T>&v);
        };
        #include "MonTemplate.tpp"
        #endif

        -------------------------------
        MonTemplate.tpp
        -------------------------------

        template <class T>
        MonTemplate<T>::MonTemplate() : std::vector<T>(){}
        template <class T>
        MonTemplate<T>::MonTemplate(int n) :std::vector<T>(n){}
        template <class T>
        MonTemplate<T>::MonTemplate(int n, const T& t) :std::vector<T>(n,t){}
        template <class T>
        MonTemplate<T>::MonTemplate(const MonTemplate<T>&v) :std::vector<T>(v){}
        template <class T>
        MonTemplate<T>::MonTemplate(const std::vector<T> &v) :std::vector<T>(v){}
        template <class T>
        MonTemplate<T>::~MonTemplate() {}
        template <class T>
        MonTemplate<T>& MonTemplate<T>::operator<<(const T& right)
        {
        this->push_back(right);
        return *this;
        }
        template <class T>
        MonTemplate<T>& MonTemplate<T>::operator+=(const MonTemplate<T>&v)
        {
        this->insert(this->end(), v.begin(), v.end());
        return *this;
        }
  • # piste

    Posté par  . Évalué à 2.

    modifie le fichier Wm4SingleCurve3.h en ajoutant à la fin :

    #include <Wm4SingleCurve3.cpp>

    et normalement dans ton code tu inclues le fichier .h
    • [^] # Re: piste

      Posté par  . Évalué à 1.

      Pas mieux :(
      • [^] # Re: piste

        Posté par  . Évalué à 2.

        alors là, j'ai un peu de mal à y croire car la réponse que je t'ai faite correspond normalement au "undefined reference". Je parierais sur une erreur de ta part. Tu ne peux pas mettre à disposition ton projet ?
        • [^] # Re: piste

          Posté par  . Évalué à 1.

          Oui en effet j'ai inclus le mauvais , pas BezierCurve mais SimpleCurve, oups ;)
          D'ailleurs j'ai ajouté dans le fichier BezierCurve et non SingleCurve vu que c'est là le probleme.

          Donc pour le coup j'ai plein d'erreurs :

          [ 18%] Building CXX object Dependencies/WildMagic4/LibFoundation/CMakeFiles/Wm4Foundation.
          dir/Curves/Wm4BezierCurve3.obj
          g++ -DWm4Foundation_EXPORTS -O2 -DNDEBUG -I/C/msys/1.0/home/OpenMASK4/OpenMASK/Depende
          ncies/WildMagic4/LibFoundation -I/C/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagi
          c4/LibFoundation/Approximation -I/C/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagi
          c4/LibFoundation/ComputationalGeometry -I/C/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/
          WildMagic4/LibFoundation/Containment -I/C/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/Wi
          ldMagic4/LibFoundation/Curves -I/C/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic
          4/LibFoundation/Distance -I/C/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/Lib
          Foundation/Interpolation -I/C/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/Lib
          Foundation/Intersection -I/C/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibF
          oundation/Mathematics -I/C/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFou
          ndation/Meshes -I/C/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFoundation
          /Miscellaneous -I/C/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFoundation
          /NumericalAnalysis -I/C/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFounda
          tion/Surfaces -I/C/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFoundation/
          System -DMINGW -DOLDOIS -DWM4_FOUNDATION_DLL_EXPORT -o Dependencies/WildMagic4/LibFounda
          tion/CMakeFiles/Wm4Foundation.dir/Curves/Wm4BezierCurve3.obj -c /C/msys/1.0/home/OpenMASK4
          /OpenMASK/Dependencies/WildMagic4/LibFoundation/Curves/Wm4BezierCurve3.cpp
          c:/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFoundation/Curves/Wm4Bezier
          Curve3.cpp:21: error: redefinition of `Wm4::BezierCurve3::BezierCurve3(int, Wm4::Vec
          tor3*)'
          c:/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFoundation/Curves/Wm4Bezier
          Curve3.cpp:21: error: `Wm4::BezierCurve3::BezierCurve3(int, Wm4::Vector3*)' pr
          eviously declared here
          c:/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFoundation/Curves/Wm4Bezier
          Curve3.cpp:128: error: redefinition of `Wm4::BezierCurve3::~BezierCurve3()'
          c:/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFoundation/Curves/Wm4Bezier
          Curve3.cpp:128: error: `virtual Wm4::BezierCurve3::~BezierCurve3()' previously decla
          red here
          c:/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFoundation/Curves/Wm4Bezier
          Curve3.cpp:146: error: redefinition of `int Wm4::BezierCurve3::GetDegree() const'
          c:/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFoundation/Curves/Wm4Bezier
          Curve3.cpp:146: error: `int Wm4::BezierCurve3::GetDegree() const' previously declare
          d here
          c:/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFoundation/Curves/Wm4Bezier
          Curve3.cpp:152: error: redefinition of `const Wm4::Vector3* Wm4::BezierCurve3:
          :GetControlPoints() const'
          c:/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFoundation/Curves/Wm4Bezier
          Curve3.cpp:152: error: `const Wm4::Vector3* Wm4::BezierCurve3::GetControlPoint
          s() const' previously declared here
          c:/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFoundation/Curves/Wm4Bezier
          Curve3.cpp:158: error: redefinition of `Wm4::Vector3 Wm4::BezierCurve3::GetPos
          ition(Real) const'
          c:/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFoundation/Curves/Wm4Bezier
          Curve3.cpp:158: error: `virtual Wm4::Vector3 Wm4::BezierCurve3::GetPosition(Re
          al) const' previously declared here
          c:/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFoundation/Curves/Wm4Bezier
          Curve3.cpp:177: error: redefinition of `Wm4::Vector3 Wm4::BezierCurve3::GetFir
          stDerivative(Real) const'
          c:/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFoundation/Curves/Wm4Bezier
          Curve3.cpp:177: error: `virtual Wm4::Vector3 Wm4::BezierCurve3::GetFirstDeriva
          tive(Real) const' previously declared here
          c:/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFoundation/Curves/Wm4Bezier
          Curve3.cpp:198: error: redefinition of `Wm4::Vector3 Wm4::BezierCurve3::GetSec
          ondDerivative(Real) const'
          c:/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFoundation/Curves/Wm4Bezier
          Curve3.cpp:198: error: `virtual Wm4::Vector3 Wm4::BezierCurve3::GetSecondDeriv
          ative(Real) const' previously declared here
          c:/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFoundation/Curves/Wm4Bezier
          Curve3.cpp:219: error: redefinition of `Wm4::Vector3 Wm4::BezierCurve3::GetThi
          rdDerivative(Real) const'
          c:/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFoundation/Curves/Wm4Bezier
          Curve3.cpp:219: error: `virtual Wm4::Vector3 Wm4::BezierCurve3::GetThirdDeriva
          tive(Real) const' previously declared here
          c:/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFoundation/Curves/Wm4Bezier
          Curve3.cpp:246: error: redefinition of `Real Wm4::BezierCurve3::GetVariation(Real, R
          eal, const Wm4::Vector3*, const Wm4::Vector3*) const'
          c:/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFoundation/Curves/Wm4Bezier
          Curve3.cpp:246: error: `virtual Real Wm4::BezierCurve3::GetVariation(Real, Real, con
          st Wm4::Vector3*, const Wm4::Vector3*) const' previously declared here
          c:/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFoundation/Curves/Wm4Bezier
          Curve3.cpp:336: error: duplicate explicit instantiation of `class Wm4::BezierCurve3
          '
          c:/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFoundation/Curves/Wm4Bezier
          Curve3.cpp:339: error: duplicate explicit instantiation of `class Wm4::BezierCurve3'
          make[2]: *** [Dependencies/WildMagic4/LibFoundation/CMakeFiles/Wm4Foundation.dir/Curves/Wm
          4BezierCurve3.obj] Error 1
          make[2]: Leaving directory `/C/msys/1.0/home/OpenMASK4/OpenMASK/build'
          make[1]: *** [Dependencies/WildMagic4/LibFoundation/CMakeFiles/Wm4Foundation.dir/all] Erro
          r 2


          Mais il dit rien sur les erreurs que j'avais avant comme quoi il les redefinirait à savir le Get et le constructeur

          CMakeFiles/OMKAddOn.dir/OSO/OMKTrajectory.obj:OMKTrajectory.cpp:(.text+0x24a): undefined r
          eference to `Wm4::BSplineCurve3::Get(float, Wm4::Vector3*, Wm4::Vector3<floa
          t>*, Wm4::Vector3*, Wm4::Vector3*) const'
          CMakeFiles/OMKAddOn.dir/OSO/OMKTrajectory.obj:OMKTrajectory.cpp:(.text+0x3255): undefined
          reference to `Wm4::BSplineCurve3::BSplineCurve3(int, Wm4::Vector3 const*, in
          t, bool, bool)'

          Bref je sais pas pourquoi il veut pas compiler la partie constructeur et le Get
  • # Wake up

    Posté par  . Évalué à 1.

    Hum, je suis pas reveillé j'ai encore mélangé les Sources, c'est BSplineCurve3 le probleme, pardon
    • [^] # Re: Wake up

      Posté par  . Évalué à 1.

      Et meme conclusion :

      c:/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFoundation/Curves/Wm4BSplin
      eCurve3.cpp:22: error: redefinition of `Wm4::BSplineCurve3::BSplineCurve3(int, const
      Wm4::Vector3*, int, bool, bool)'
      c:/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFoundation/Curves/Wm4BSplin
      eCurve3.cpp:22: error: `Wm4::BSplineCurve3::BSplineCurve3(int, const Wm4::Vector3<Re
      al>*, int, bool, bool)' previously declared here
      c:/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFoundation/Curves/Wm4BSplin
      eCurve3.cpp:39: error: redefinition of `Wm4::BSplineCurve3::BSplineCurve3(int, const
      Wm4::Vector3*, int, bool, const Real*)'
      c:/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFoundation/Curves/Wm4BSplin
      eCurve3.cpp:39: error: `Wm4::BSplineCurve3::BSplineCurve3(int, const Wm4::Vector3<Re
      al>*, int, bool, const Real*)' previously declared here

      c:/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFoundation/Curves/Wm4BSplin
      eCurve3.cpp:145: error: redefinition of `void Wm4::BSplineCurve3::Get(Real, Wm4::Vec
      tor3*, Wm4::Vector3*, Wm4::Vector3*, Wm4::Vector3*) const'
      c:/msys/1.0/home/OpenMASK4/OpenMASK/Dependencies/WildMagic4/LibFoundation/Curves/Wm4BSplin
      eCurve3.cpp:145: error: `void Wm4::BSplineCurve3::Get(Real, Wm4::Vector3*, Wm4
      ::Vector3*, Wm4::Vector3*, Wm4::Vector3*) const' previously declared her
      e

      Et il trouve bien le Get et le constructeur :( :( :(
      • [^] # Re: Wake up

        Posté par  . Évalué à 2.

        : error: redefinition of:
        c'est facile : le fichier est inclu plusieurs fois. À toi de faire la chasse aux inclusions multiple.
        Normalement, tu dois avoir maintenant compris d'où venaient les problèmes (d'abord symboles absents après compilation : undefined, d'où l'include que je t'ai fait faire ; puis multiples inclusions du même fichier -généralement un ifndef bien placé règle les problèmes).

        Amuses-toi bien avec les inclusions.
        • [^] # Re: Wake up

          Posté par  . Évalué à 1.

          Finalement c'est une option de compilation passé à la libWm4 et pas au reste.
          En gros la premiere avec le NDEBUG et pas les autres.
          Voilà reglé

          Merci !

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.