IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Probleme Makefile avec Objet en C++ (référence indéfinie vers )


Sujet :

C++

  1. #1
    Membre habitué
    Inscrit en
    Juin 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2003
    Messages : 223
    Points : 145
    Points
    145
    Par défaut Probleme Makefile avec Objet en C++ (référence indéfinie vers )
    Bon alors voila, j'ai un petit probleme de C++ mais je pense que cela vient du fait que je ne sais pas faire un Makefile ... (Mauvais linkage)


    Voici mon code C++

    main.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ...
    #include "MptMatrix.hpp"
    ...
    main() {
    ...
    MptMatrix<uint32> meanMx(height,width);
    ...
    }
    Voici tout le code de MptMatrix.hpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    #ifndef MptMATRIX_H
    #define MptMATRIX_H
     
    #include <c4v.h>
     
    template <class T>
    class MptMatrix {
     
    public:
     
    	T _pdata[];	
     
    	// Default Constructor	
    	MptMatrix(void);
     
    	// Constructor by Copy
    	MptMatrix(const MptMatrix& initMx);
     
    	// Constructor
    	MptMatrix(int r, int c, bool scanHori=true);
     
    	// Destructor
    	~MptMatrix();	
     
    	// Get function 
    	inline int getRows();
    	inline int getCols();
    	inline bool scanHorizontal();
     
    	void create(int r, int c, bool scanHori=true);
    	void loadImages(IplImage * img);
     
     
     
    private:
    //	T _pdata[];
    	int _rows, _cols;
    	bool _scanHori;
     
    };
     
     
    template <class T>
    inline int MptMatrix<T>::getRows() { return _rows; } 
     
    template <class T>
    inline int MptMatrix<T>::getCols() { return _cols; }
     
    template <class T>
    inline bool MptMatrix<T>::scanHorizontal() { return _scanHori; }
    #endif
    Le MptMatrix.cpp est correct car ca compile bien donc je vous le file pas ... (déjà assez a lire)

    Et pour finir voici le code du Makefile ou se trouve surement l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    # Directories
    SRCDIR   = src
    INCDIR   = include
    OBJDIR   = obj
     
    # Tools
    CC     = gcc
    CXX    = g++
    RM     = rm -rf
    CP     = cp
     
    # Flags
    CFLAGS      = -I$(INCDIR) `pkg-config opencv --cflags`
    CXXFLAGS    = -I$(INCDIR) `pkg-config opencv --cflags`
    LDFLAGS	    = `pkg-config opencv --libs`
    DEBUGOPT    = -g -D_DEBUG 
    RELEASEOPT  = -O3 -DNDEBUG
     
     
    EXEC=trackpatch
    objects = main \
    	 MptMatrix \
    	 MptLayIIM \
         	 matching_square \
    
    all: $(EXEC)
     
    ## Linkage
    $(EXEC): $(foreach o,$(objects),$(OBJDIR)/$(o).o)
     
    	@$(CC) -o $@ $^ $(LDFLAGS)
     
     
    # --------------------------
    # Generation of all objects:
    $(OBJDIR)/%.o: $(SRCDIR)/%.cpp
    	$(CXX) $(INCLUDE) $(CXXFLAGS) $(DEBUGOPT) -c $< -o $@
     
    $(OBJDIR)/%.o: $(SRCDIR)/%.c
    	$(CC) $(INCLUDE) $(CFLAGS) $(DEBUGOPT) -c $< -o $@
     
    # Nettoyage des objets
    clean:
    	$(RM) $(OBJDIR)/*.o
     
    # Nettoyage objets plus executable
    mrproper: 
    	clean
    	$(RM) $(EXEC)
    Le but etant de compiler tous les .cpp choisit dans le repertoire src/ avec leur .hpp
    de pouvoir mettre les includes generaux dans le repertoire include/

    Quand je parle de .cpp choisit je veux dire que le Makefile doit selectionner dans object les noms des fichiers a compiler...

    objects = main \
    MptMatrix \
    MptLayIIM \
    matching_square \


    Pour finir l'execution finale du make se deroule ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    neub@hpdv1000:~/projetDS/openCV$ make
    g++  -Iinclude `pkg-config opencv --cflags` -g -D_DEBUG  -c src/main.cpp -o obj/main.o
    g++  -Iinclude `pkg-config opencv --cflags` -g -D_DEBUG  -c src/MptMatrix.cpp -o obj/MptMatrix.o
    g++  -Iinclude `pkg-config opencv --cflags` -g -D_DEBUG  -c src/MptLayIIM.cpp -o obj/MptLayIIM.o
    g++  -Iinclude `pkg-config opencv --cflags` -g -D_DEBUG  -c src/matching_square.cpp -o obj/matching_square.o
    obj/main.o : Dans la fonction "imageProcess(char const*)":src/main.cpp:57: référence indéfinie vers « MptMatrix<unsigned int>::MptMatrix(int, int, bool)»
    :src/main.cpp:71: référence indéfinie vers « MptMatrix<unsigned int>::~MptMatrix()»
    :src/main.cpp:71: référence indéfinie vers « MptMatrix<unsigned int>::~MptMatrix()»
    collect2: ld a retourné 1 code d'état d'exécution
    make: *** [trackpatch] Erreur 1
    Merci d'avance à tous les courageux qui vont lire mon post et surtout a tous ceux qui vont me repondre

  2. #2
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Le message est pourtant clair. Tu n'as défini ni les constructeurs ni le destructeur.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  3. #3
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Luc Hermitte
    Le message est pourtant clair. Tu n'as défini ni les constructeurs ni le destructeur.
    Je me demande si ce n'est pas une
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  4. #4
    Membre habitué
    Inscrit en
    Juin 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2003
    Messages : 223
    Points : 145
    Points
    145
    Par défaut
    Citation Envoyé par Luc Hermitte
    Le message est pourtant clair. Tu n'as défini ni les constructeurs ni le destructeur.

    Constructeur et destrusteur sont bien definis ... C'est juste que le main.cpp le trouve pas !!!

    mais j'ai l'impression que c'est bien le probleme qui se trouve dans la FAQ !!!

    La j'ai corriger, il me reste un p'tit probleme avec mon pdata mais ca devrais aller!

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par elraton
    Constructeur et destrusteur sont bien definis ... C'est juste que le main.cpp le trouve pas !!!
    Je ne vois aucune définition ni pour le constructeur ni pour le destructeur...

  6. #6
    Membre habitué
    Inscrit en
    Juin 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2003
    Messages : 223
    Points : 145
    Points
    145
    Par défaut
    Bon alors voici les definitions (du .cpp) des fonctions declarée dans le .hh


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    template <class T>
    MptMatrix<T>::MptMatrix(void)
    : _rows(0), _cols(0), _pdata(0), _scanHori(0) {
    }
     
    template <class T>
    MptMatrix<T>::MptMatrix(int r,int c,bool scanHori) {
    	this->create(r, c, scanHori);
    }
     
    template <class T>
    MptMatrix<T>::MptMatrix(const MptMatrix<T>& initMx) {
    	//Same class so we can access to private fields 
    	_rows = initMx._rows;
    	_cols = initMx._cols;
    	_scanHori = initMx._scanHori;
    	//memcopy should be use
    	_pdata = initMx._pdata;
    }
     
     
    template <class T>
    MptMatrix<T>::~MptMatrix(void) {
    	// if (pdata!=0) free(pdata); //Restitute memory
    	delete[] _pdata;
    }
     
    template <class T>
    void MptMatrix<T>::create(int r, int c, bool scanHori) {
    	_rows  = r;
    	_cols  = c;
    	_scanHori = scanHori;
    	_pdata = new T[r*c];
    }
     
    template <class T>
    void MptMatrix<T>::loadImages(IplImage* img) {
     
    	int height,width,step,channels;
    	uchar *data;
     
    	// get the image data
    	height    = img->height;
    	width     = img->width;
    	step      = img->widthStep;
    	channels  = img->nChannels;
    	data      = (uchar *)img->imageData;
    	printf("Process %dx%d image with %d channels\n",height,width,channels);
    }

  7. #7
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Si c'est dans un .cpp, c'est bien ce qu'on te dit, ça ne va pas. Regarde la FAQ stp.

  8. #8
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Miles
    Si c'est dans un .cpp, c'est bien ce qu'on te dit, ça ne va pas. Regarde la FAQ stp.
    Je crois que je devrais eviter de mettre un lien sur un smiley... ca a l'air de perturber certains.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Pour certaines personnes, il faut le dire plusieurs fois pour qu'ils se décident J'avais vu ton message, j'aurais plutôt dû mettre un renvoi vers lui

  10. #10
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Ce n'est pas a toi que je pensais comme "certains". Je devrais peut-etre continuer, c'est pas un mauvais test. Pour ceux qui aiment et ne connaissaient pas d'autres problemes.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  11. #11
    Membre habitué
    Inscrit en
    Juin 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2003
    Messages : 223
    Points : 145
    Points
    145
    Par défaut
    Citation Envoyé par elraton
    Constructeur et destrusteur sont bien definis ... C'est juste que le main.cpp le trouve pas !!!

    mais j'ai l'impression que c'est bien le probleme qui se trouve dans la FAQ !!!

    La j'ai corriger, il me reste un p'tit probleme avec mon pdata mais ca devrais aller!

    Tranquil tranquil, j'avais bien lu la FAQ mais juste une autre erreur ... mais j'etais un peu naze hier pour la trouver.

    Le probleme est bien resolu ....


    PS:Le faq smiley est quand meme un peu perturbant mais bon je crois que apres 5m une personne normalement constitué devrait penser a cliquer dessus


    A+++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. référence indéfinie vers.
    Par étoile de mer dans le forum GTK+
    Réponses: 3
    Dernier message: 21/03/2014, 14h22
  2. référence indéfinie vers « _imp__Py_SetProgramName »
    Par ttf dans le forum Interfaçage autre langage
    Réponses: 5
    Dernier message: 29/03/2011, 14h01
  3. Réponses: 2
    Dernier message: 08/03/2010, 17h00
  4. référence indéfinie vers « vtable for FenPrincipale
    Par yLaplace dans le forum Débuter
    Réponses: 5
    Dernier message: 01/03/2010, 13h49
  5. [débutant]probleme avec makefile-module objet non créé
    Par Invité dans le forum Systèmes de compilation
    Réponses: 5
    Dernier message: 13/06/2007, 18h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo