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

Systèmes de compilation Discussion :

[Debutant] Makefile


Sujet :

Systèmes de compilation

  1. #1
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 146
    Points : 204
    Points
    204
    Par défaut [Debutant] Makefile
    voilà mon programme main.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <iostream> 
     
    using namespace std;  
     
     int main() 
     { 
       char buffy[128]; 
     
       cout << "Hello World!\n"; 
     
       exit(0); 
     }
    Voilà mon Makefile

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #makefile 
    resultat : main.o
    		g++ main.o -o resultat
    main.o : main.cpp
    		g++ -c main.cpp
     
    all :
    		${MAKE} main	
     
    clean :
    		-del main.o
    je ne comprends pas bien les erreurs suivantes du Makefile (sous Eclipse)

    Kind Status Priority Description Resource In Folder Location
    Error *** [all] Erreur 2 Essai
    Error *** [main] Erreur 1 Essai
    Error *make main In function `main': main.o Essai line 0
    Error * undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)' In functionKind Status Priority Description Resource In Folder Location
    Error *** [all] Erreur 2 Essai
    Error *** [main] Erreur 1 Essai
    Error *make main In function `main': main.o Essai line 0
    Error * undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)' In function `__static_initialization_and_destruction_0(int, int)': main.o Essai line 0
    Error * undefined reference to `std::cout' In function `main': main.o Essai line 0
    Error * undefined reference to `std::ios_base::Init::~Init [in-charge]()' undefined reference to `__gxx_personality_v0' main.o Essai line 0
    Error * undefined reference to `std::ios_base::Init::Init[in-charge]()' In function `__tcf_0': main.o Essai line 0
    `__static_initialization_and_destruction_0(int, int)': main.o Essai line 0
    Error * undefined reference to `std::cout' In function `main': main.o Essai line 0
    Error * undefined reference to `std::ios_base::Init::~Init [in-charge]()' undefined reference to `__gxx_personality_v0' main.o Essai line 0
    Error * undefined reference to `std::ios_base::Init::Init[in-charge]()' In function `__tcf_0': main.o Essai line 0






    Merci beaucoup pour votre aide

  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
    C'est bizarre, on dirait que tu as compilé avec gcc et pas g++ d'après les erreurs.
    Essaie de compiler à la mano sans passer par le makefile.

  3. #3
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 146
    Points : 204
    Points
    204
    Par défaut
    A la mano cela marche
    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
    [jfrancois@localhost Essai]$ ls
    main.cpp  main.o  makefile
    [jfrancois@localhost Essai]$ g++ main.cpp
    [jfrancois@localhost Essai]$ ls
    a.out*  main.cpp  main.o  makefile
    [jfrancois@localhost Essai]$ a.out
    Hello World!
    [jfrancois@localhost Essai]$ make
    g++ main.o -o resultat
    [jfrancois@localhost Essai]$ ls
    a.out*  main.cpp  main.o  makefile  resultat*
    [jfrancois@localhost Essai]$ resultat
    Hello World!
    [jfrancois@localhost Essai]$ gcc main.cpp
    /home/jfrancois/tmp/ccdmhciU.o(.text+0x1c): In function `main':
    : undefined reference to `std::cout'
    /home/jfrancois/tmp/ccdmhciU.o(.text+0x21): In function `main':
    : undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
    /home/jfrancois/tmp/ccdmhciU.o(.text+0x50): In function `__static_initialization_and_destruction_0(int, int)':
    : undefined reference to `std::ios_base::Init::Init[in-charge]()'
    /home/jfrancois/tmp/ccdmhciU.o(.text+0x7f): In function `__tcf_0':
    : undefined reference to `std::ios_base::Init::~Init [in-charge]()'
    /home/jfrancois/tmp/ccdmhciU.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
    collect2: ld returned 1 exit status
    [jfrancois@localhost Essai]$ ls
    main.cpp  main.o  makefile  resultat*
    Il semble bien qu'Eclipse execute gcc et non g++ donc pas le makefile

    Merci d'avance pour me dire pourquoi il y a une erreur sur clean et all dans le makefile

  4. #4
    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
    Là, je ne vois pas de problème.
    D'un autre côté, pour ce genre de projets mono-fichier inutile de définir un makefile. Un simple "make main" suffit.

    Sinon, la boucle de "all" qui rappelle make me parait un peu bizarre. Je suis plus habitué à écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    PROJECT = main
     
    all: $(PROJECT)
     
    main : $(OBJECTS)
        $(CXX) -o ....
    ...
    PS: je ne crois pas que nous soyons sur le bon forum.

  5. #5
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Je vois deux probleme :

    * pourquoi rappelles tu ${MAKE} dans ton makefile
    * toujours a cette ligne, main ne reference aucune regle

    Je pense que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    all : main    
     
    resultat : main.o 
          g++ main.o -o resultat 
     
    main.o : main.cpp 
          g++ -c main.cpp 
     
    clean : 
          -del main.o
    devrait mieux fonctionner.

  6. #6
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 146
    Points : 204
    Points
    204
    Par défaut
    make indique qu'il manque un séparateur




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Error			*** séparateur manquant . Arrêt.	makefile	Essai	line 4
    pour le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    all : main    
     
    resultat : main.o 
          g++ main.o -o resultat 
     
    main.o : main.cpp 
          g++ -c main.cpp 
     
    clean : 
          -del main.o
    je ne vois pas bien le pb

    Merci

  7. #7
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 146
    Points : 204
    Points
    204
    Par défaut
    cela marche mais je ne sais pas bien pourquoi !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #makefile
     all : main    
    CC=g++
     resultat : main.o 
    		g++ main.o -o resultat 
     
     main.o : main.cpp 
    		g++ -c main.cpp 
     
     clean : 
    		-del main.o

  8. #8
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Zut, j'ai oublie une modif dans ce que je t'ai donne, comme il n'existe ps de regle pour main, all main ne vas rien fait, c'est all: resultat qu'il faut utiliser (ou renommer la regle resultat).

    PS : De plus si tu defini CC, c'est pour ne pas avoir a mettre le nom du compilateur dans le reste du makefile donc remplace les g++ par des {CC} dans les lignes de commandes et defini CC avant toute regle.

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 290
    Points : 325
    Points
    325
    Par défaut
    normalement c'est CXX le complo c++
    CC c'est le compilo C...

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

Discussions similaires

  1. [debutant] compilation gcc et makefile
    Par harsh dans le forum Systèmes de compilation
    Réponses: 4
    Dernier message: 08/06/2006, 18h30
  2. [FLASH] pb debutant
    Par ultrakas dans le forum Flash
    Réponses: 2
    Dernier message: 05/06/2003, 00h48
  3. [debutant]Limiter le temps de saisi
    Par Nasky dans le forum C
    Réponses: 5
    Dernier message: 17/03/2003, 15h47
  4. Compilation avec un Makefile
    Par Mau dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 28/02/2003, 11h30
  5. Réponses: 3
    Dernier message: 09/02/2003, 01h09

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