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 lem__mel . Évalué à 1.
P.S.:
- mauvais copier/coller : on voit pas tous les messages
- le warning te perturbe pas ?
[^] # Re: une piste
Posté par xabi . Évalué à 1.
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 lem__mel . Évalué à 3.
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;
}
[^] # Re: une piste
Posté par xabi . Évalué à 1.
Le code vient de Wildmagic WM4 (geometric tools)
Et le probleme vient du template de Wm4BezierCurve3 de Wm4BerzierCurve3.cpp : http://www.geometrictools.com/LibFoundation/Curves/Wm4Single(...)
et http://www.geometrictools.com/LibFoundation/Curves/Wm4Single(...)
Je viens de compiler Wm4 en dehors de mon projet et en fait ca marche aussi sous gcc 3.4.5.
Donc il doit bien me manquer une option de compilation mais j'ai beau regarder le makefile de Wildmagick, il n' y a aucune option bizarre.
# piste
Posté par lem__mel . Évalué à 2.
#include <Wm4SingleCurve3.cpp>
et normalement dans ton code tu inclues le fichier .h
[^] # Re: piste
Posté par xabi . Évalué à 1.
[^] # Re: piste
Posté par lem__mel . Évalué à 2.
[^] # Re: piste
Posté par xabi . Évalué à 1.
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 xabi . Évalué à 1.
[^] # Re: Wake up
Posté par xabi . Évalué à 1.
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 lem__mel . Évalué à 2.
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 xabi . Évalué à 1.
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.