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 :

Compilation séparer


Sujet :

C++

  1. #1
    Membre éclairé Avatar de benjiprog
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 302
    Par défaut Compilation séparer
    Bonjour, je voudrais créer un module objet de ma classe vecteur voilà comment je procéde (je programme sous windows avec dev C++) :

    Fichier.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class vecteur 
    {
          private :            /*Membres donnés declarer priver*/
                  double comp1;
                  double comp2;
                  double comp3;
          public :                /*Fonction membre declarer public*/
                 vecteur (double,double,double); /*Constructeur*/
                 void homothetie (int);
                 void affiche ();
    };
    Fichier à compiler pour obtenir le module objet :
    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
     
    #include <iostream>
    #include "vecteur.h"  /*Pour les declaration de la classe vecteur*/
    using namespace std;
     
                    /*Definition de la classe vecteur*/
    vecteur::vecteur (double vec1,double vec2,double vec3) 
    {
        comp1=vec1; comp2=vec2; comp3=vec3;    
    }
    void vecteur::homothetie (int nb)
    {
        comp1*=nb; comp2*=nb; comp3*=nb;
    }
    void vecteur::affiche ()
    {
        cout <<"Les composantes du vecteur sont"<<endl<<
                         "composante 1 :"<<comp1<<endl<<                 
                         "composante 2 :"<<comp2<<endl<<
                         "composante 3 :"<<comp3<<endl;   
    }
    Le compilateur me donne une erreur :
    [Linker error] undefined reference to `WinMain@16'
    ld returned 1 exit status
    *** [CompVecteur.exe] Error 1
    Je ne comprend pas pourquoi il y a une erreur de lien.

  2. #2
    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 : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Il te faut un point d'entrée dans ton programme, c'est ce qui est indiqué. Si tu veux une interface graphique, il te faut un WinMain, sinon un main suffit, normalement !

  3. #3
    Membre chevronné Avatar de niglo
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 379
    Par défaut
    Citation Envoyé par Miles
    Il te faut un point d'entrée dans ton programme, c'est ce qui est indiqué. Si tu veux une interface graphique, il te faut un WinMain, sinon un main suffit, normalement !
    Ca dépend comment il compile. Si il veut juste faire un vecteur.cpp et vecteur.h pour disposer d'une classe vecteur il a tout à fait le droit de le faire et surtout de ne pas mettre de main.

  4. #4
    Membre émérite Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Par défaut
    Bonjour,
    Je ne sais pas si c'est encore d'actualité mais voici 2 remarques:

    1/L'erreur que te retourne le compilateur prouve que tu as créé un projet en mode fenêtre et non pas en mode console.

    2/ Comme indiqué, si tu veux compiler tes objets afin de pouvoir les réutiliser, tu n'as pas besoin de "main". Dans ce cas, tu ne compiles pas avec le bon projet.

  5. #5
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Ce n'est pas le compilateur qui renvoie cette erreur mais le linker.

    Si tu veux savoir est-ce que le code de ta class est correct il te faut alors uniquement compiler(les différents fichiers .cpp) et pas linker.


    Le probléme de WinMain vient du fait que lors de la création de ton projet avec ton editeur favori tu as du demandé de créer un projet Win32 et donc le linker s'attends à trouver le point d'entrée d'une telle application.

  6. #6
    Membre éclairé Avatar de benjiprog
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 302
    Par défaut
    Oui mais moi ce que je veux c'est juste créer un module objet et pas un programme donc pas de main comme a dit niglo. Le projet est pourtant bien en mode console. Je ne vois toujours pas comment résoudre ce problème, faut-il changer le code un des 2 fichiers?

  7. #7
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Tu veux créér des fichiers objets?
    (ie .o avec gcc/g++)

  8. #8
    Membre éclairé Avatar de benjiprog
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 302
    Par défaut
    Oui, je veux créer un module objet avec les fichiers vecteur.cpp et vecteur.h afin de pouvoir disposer d'une classe vecteur et éventuellement pouvoir réutiliser cet objet, je ne compile pas avec gcc mais avec dev C++.

  9. #9
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    il suffit de compiler le fichier vecteur.cpp sans aucun projet, simplement ce fichier.
    Ou bien faire "compiler le fichier courant" quelque part dans ton IDE ...

  10. #10
    Membre éclairé Avatar de benjiprog
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 302
    Par défaut
    Je compile seul ce fichier donc mais il me met toujours la même erreur :
    [Linker error] undefined reference to `WinMain@16'
    ld returned 1 exit status
    Il ne peut pas compiler parce qu'il n'y a pas de main non?

  11. #11
    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 : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Il a compilé mais il essaie de linker en plus.

  12. #12
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par benjiprog
    Je compile seul ce fichier donc mais il me met toujours la même erreur :
    [Linker error] undefined reference to `WinMain@16'
    ld returned 1 exit status
    Il ne peut pas compiler parce qu'il n'y a pas de main non?
    Il faut uniquement compiler, build appelle également le linker. Tu as pas un bouton ou y'a écrit "compile" ?

  13. #13
    Membre éclairé Avatar de benjiprog
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 302
    Par défaut
    Donc si il a compiler normalement c'est bon. Après compilation il y a eu génération d'un fichier objet "main.o" et d'un "makefile.win" est-ce normale?? (je débute avec compilation séparer)

  14. #14
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par benjiprog
    Donc si il a compiler normalement c'est bon. Après compilation il y a eu génération d'un fichier objet "main.o" et d'un "makefile.win" est-ce normale?? (je débute avec compilation séparer)
    Le fichier .o c'est ton fichier objet,tu pourras l'inclure dans tes projets maintenant

    D'ailleurs je pense même que la première fois ou tu avais compiler +linker le fichier objet était crée..

  15. #15
    Membre éclairé Avatar de benjiprog
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 302
    Par défaut
    D'accord et qu'est ce que veux dire le fichier "makefile.win" qui a été générer aussi lors de la compilation?

    Quand j'introduit le fichier objet "main.o" dans mon projet accompagner par mon fichier.cpp

    fichier.cpp
    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
     
    #include <cstdlib>
    #include <iostream>
     
    using namespace std;
     
    int main (void)
    {
        vecteur benji (2,3,6);
        benji.homothetie (5);
        benji.affiche ();
     
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    qui utilise la classe vecteur je reçoit des erreur comme quoi la classe vecteur ne serait pas déclarer :
    `vecteur' undeclared (first use this function)
    expected `;' before "benji"
    ["../Programme en C++/main.o"] Error 1

  16. #16
    Membre éclairé Avatar de benjiprog
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 302
    Par défaut
    Mon fichier .cpp sert bien evidemment à utiliser la classe vecteur mais il n'est pas déclarer alors que j'ai inclus le fichier objet dans le projet je programme avec DEV C++ peut-être que je m'y prend mal.

  17. #17
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Il te faut faire un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include "MonVecteur.h"
    dans le fichier utilisant un vecteur.

    Le .obj ne sert qu'a l'edition des liens et pas à la compilation.

  18. #18
    Membre éclairé Avatar de benjiprog
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 302
    Par défaut
    Ca marche mais le problème c'est qu'il faut que je mette les 2 fichiers le .h et la definition du vecteur car si j'inclu le fichier .o j'ai encore une erreur de linkers :
    [Linker error] undefined reference to `vecteur::vecteur(double, double, double)'
    [Linker error] undefined reference to `vecteur::homothetie(int)'
    [Linker error] undefined reference to `vecteur::affiche()'
    ld returned 1 exit status
    *** [compvecteur.exe] Error 1
    De plus maintenant quand je compile mon fichier vecteur def.cpp je n'ai plus de fichier .o générer.
    Il n'y aurait un moyen de supprimer ce problème de linker??

  19. #19
    Membre éclairé Avatar de benjiprog
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 302
    Par défaut
    Ne peut-on pas trouver sur le site une petite explication sur la compilation séparer?

  20. #20
    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 : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Normalement, dans ton ide, tu spécifies les fichiers .cpp à compiler. Là, dans l'édition des liens, il ne prend en compte que fichier.cpp et ne linke pas avec vecteur .cpp. Attention à dire que vecteur.o est un fichier objet et non un fichier source à compiler, ...

Discussions similaires

  1. [Compilation] [qmake] Séparer les binaires et les fichiers objets à la compilation
    Par Calak dans le forum Outils
    Réponses: 0
    Dernier message: 18/12/2014, 23h51
  2. Réponses: 4
    Dernier message: 17/02/2006, 15h07
  3. Réponses: 4
    Dernier message: 01/12/2005, 11h19
  4. Vitesse de compilation
    Par srvremi dans le forum C++Builder
    Réponses: 5
    Dernier message: 30/07/2002, 16h49
  5. Réponses: 1
    Dernier message: 27/05/2002, 01h44

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