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 g++ de plusieurs header


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    40
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 40
    Par d�faut compilation g++ de plusieurs header
    Bonjour,
    J'ai une erreur � la compilation de mon programme et je n'arrive pas � trouver des explications sur la mani�re de compiler un fichier *.cpp qui charge plusieurs fichiers d'en-t�tes *.h (avec #include "fichier1.h" etc.).
    Est-ce que vous pourvez me donner la ligne de commande pour compiler cette ensemble de fichiers ci-dessous, parce que g++ main_prog.cpp -o main_prog provoque cette erreur :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    main_prog.cpp: (.text+0x24df): undefined reference to `prog1(double, double, short*, short*)'
    main_prog.cpp: (.text+0x2854): undefined reference to `prog2(std::basic_string<char,...)
    main_prog.cpp: (.text+0x3c76): undefined reference to `prog1(double, double, short*, short*)'
    main_prog.cpp: (.text+0x3fe5): undefined reference to `prog2(std::basic_string<char,...)
    collect2: ld a retourné 1 code d'état d'exécution
    prog1.h :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    #ifndef prog1_h
    #define prog1_h
    /* function prototype */
    int prog1(double a, double b, short *c, short *d);
    #endif
    prog1.cpp :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <iostream>
    #include <cstdlib>
    #include <cmath>
    using namespace std;
    int prog1(double a, double b, short *c, short *d)
    {
    etc.
    }
    prog2.h :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    #ifndef prog2_h
    #define prog2_h
    /* function prototype */
    #include<string>
    void prog2(std::string file, ...);
    #endif
    prog2.cpp :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <iostream>
    #include <sstream>
    #include <string>
    #include <stdlib.h>
    #include <vector>
    using namespace std;
    void prog2(std::string file, ...)
    {
    etc.
    }
    main_prog.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
    16
    17
    18
    19
    20
    #include <iostream>
    #include <string>
    #include <fstream>
    #include <new>
    #include <iomanip>
    #include <cstdlib>
    #include <algorithm>
    #include <vector>
    #include <sstream>
    #include "prog1.h"
    #include "prog2.h"
    using namespace std;
    int main(int argc, char *argv[])
    {
    etc.
      prog1(w,x,&y,&z);
    etc.
      prog2(file, etc.);
      return 0;
    }
    Compilation :
    g++ -c prog1.cpp --> Pas d'erreur � la compilation
    g++ -c prog2.cpp --> Pas d'erreur � la compilation
    g++ -c main_prog.cpp --> Erreurs list�es ci-dessus

  2. #2
    R�dacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supa�ro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Ing Supa�ro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par d�faut
    Le plus simple pour 2/3 fichiers c'est de tout compiler en une fois.
    g++ prog1.cpp prog2.cpp main_prog.cpp -o prog && ./prog
    Sinon il faut pour chaque fichier g�n�rer le fichier objet correspondant, et linker le tout apr�s (ce que tu ne fais pas ici d'o� tes erreurs).
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une tr�s bonne doc sur le C++ (en) Why linux is better (fr)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    40
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 40
    Par d�faut
    Citation Envoy� par Davidbrcz Voir le message
    Le plus simple pour 2/3 fichiers c'est de tout compiler en une fois.


    Sinon il faut pour chaque fichier g�n�rer le fichier objet correspondant, et linker le tout apr�s (ce que tu ne fais pas ici d'o� tes erreurs).
    Merci beaucoup Davidbrcz, �a marche bien ce que tu m'as �cris. J'avais des difficult�s � trouver ce genre de ligne de commande. �a doit �tre d� au fait que l'utilisation d'un environnement de programmation avec cr�ation de projet et compilateur int�gr� sont largement + utilis�s... mais l� je dois faire avec les moyens du bord.

    Citation Envoy� par Davidbrcz Voir le message
    Non, s'il n'y aucun appel des fonctions entre elle, pas besoin des prototypes. Ils servent juste � dire au compilateur "ca machin est une fonction, tu auras les d�tails plus tard". De plus, ca aurait donn� une erreur de compilation, l� le PO a une erreur de linker.

    je ne peux que t'inviter � te pencher sur les phases d'une compilation (pre-processeur/compilation/linkage)
    J'allais prendre en compte ce que atttchoum disait alors merci pour cette correction.
    Merci qd m�me atttchoum pour la tentative d'aide.

    Maintenant je vais �galement devoir cr�er une librairie partag�e de tout �a.
    J'ai fais un test qui ne me cr�e par d'erreur � l'execution mais je vais surtout voir ce que cela donne lorsque je vais essayer d'utiliser cette librairie.
    J'ai fais ceci : sur les fichiers (prog1.cpp, prog2.cpp et main_prog.cpp) suivi de
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    ld -G *.o -o libprogramme.so
    Si tu rep�res un probl�me, tu peux me le dire stp.

    Bonne journ�e

  4. #4
    R�dacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supa�ro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Ing Supa�ro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par d�faut
    Il ne faut pas de fonction main dans un fichier .so

    Sinon, je ne me rappelle plus des commandes exactes (je ne cr�er quasiment jamais des .so ou des .a)
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une tr�s bonne doc sur le C++ (en) Why linux is better (fr)

  5. #5
    Membre exp�riment�
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    188
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 188
    Par d�faut
    arf au temps pour moi j'�tais trop dans le C++

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    40
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 40
    Par d�faut
    Citation Envoy� par Davidbrcz Voir le message
    Il ne faut pas de fonction main dans un fichier .so

    Sinon, je ne me rappelle plus des commandes exactes (je ne cr�er quasiment jamais des .so ou des .a)
    OK Merci. Je vais voir �a avec des tests. Je ne suis plus bloqu� l�.

  7. #7
    Membre exp�riment�
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    188
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 188
    Par d�faut
    Citation Envoy� par alter Voir le message
    prog1.h :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    #ifndef prog1_h
    #define prog1_h
    /* function prototype */
    int prog1(double a, double b, short *c, short *d);
    #endif
    prog1.cpp :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <iostream>
    #include <cstdlib>
    #include <cmath>
    using namespace std;
    int prog1(double a, double b, short *c, short *d)
    {
    etc.
    }
    dans tes prog.cpp tu dois rajouter un #include "prog.h" sinon il trouve la d�claration des fonction (donc pas d'erreur de compilation) mais il ne trouve pas leur impl�mentation (d'o� l'erreur de linkage).
    de plus d'ordinaire on mais les #include <cmath>,... dans les *.h

  8. #8
    R�dacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supa�ro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Ing Supa�ro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par d�faut
    Citation Envoy� par atttchoum Voir le message
    dans tes prog.cpp tu dois rajouter un #include "prog.h" sinon il trouve la d�claration des fonction (donc pas d'erreur de compilation) mais il ne trouve pas leur impl�mentation (d'o� l'erreur de linkage).
    de plus d'ordinaire on mais les #include <cmath>,... dans les *.h
    Non, s'il n'y aucun appel des fonctions entre elle, pas besoin des prototypes. Ils servent juste � dire au compilateur "ca machin est une fonction, tu auras les d�tails plus tard". De plus, ca aurait donn� une erreur de compilation, l� le PO a une erreur de linker.

    je ne peux que t'inviter � te pencher sur les phases d'une compilation (pre-processeur/compilation/linkage)
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une tr�s bonne doc sur le C++ (en) Why linux is better (fr)

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. comment cr�er un raport contenant plusieurs headers ?
    Par slahedine dans le forum Reports
    R�ponses: 7
    Dernier message: 04/03/2010, 17h20
  2. Compiler Boost avec plusieurs MSVC install�s
    Par camboui dans le forum Boost
    R�ponses: 5
    Dernier message: 07/09/2009, 12h07
  3. Compilation app sous plusieurs OS et arch
    Par mercure07 dans le forum Qt
    R�ponses: 2
    Dernier message: 08/04/2008, 09h02
  4. [JTable] Mettre plusieurs headers sur un JTable
    Par banania dans le forum Composants
    R�ponses: 2
    Dernier message: 09/07/2007, 20h49
  5. compilation projet ( en plusieur fichier )
    Par damien77 dans le forum Code::Blocks
    R�ponses: 3
    Dernier message: 21/02/2007, 23h46

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