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 :

Problème de compilation à cause d'une ouverture de fichier.


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 113
    Points : 48
    Points
    48
    Par défaut Problème de compilation à cause d'une ouverture de fichier.
    Bonjour à tous,

    voici mon problème:

    J'ai fait un programme qui fonctionnait correctement, mais j'ai voulu découper toutes les fonctions, et les mettre dans des .cpp et des .h bien distincts...

    Après pas mal de galère, j'y suis presque arrivé, mais j'ai toujours cette erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    /home/philippe/tmp/cc250Fhm.o: In function `main':
    main.cpp:(.text+0x83): undefined reference to `aller_arobase(_IO_FILE*)'
    collect2: ld returned 1 exit status
    Je ne sais pas trop quoi faire, et comme je travaille depuis ce matin la dessus, ca commence à me fatiguer... lol (Tout ce qui est dans le zip est fait depuis ce matin...)
    En parlant de zip, le voici:
    http://bsb.jexiste.fr/code/code.zip

    Tout est dedans...

    Merci de m'aider, parce que j'en ai marre !!!!!!!!!! loool

    Sachant que:
    Le fichier qui sera ouvert n'est pas présent dans le zip car je ne veux pas le mettre.
    Si qqun pouvait aussi me faire le Makefile ca serait super !

    Merci d'avance !

    Philippe

  2. #2
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Points : 588
    Points
    588
    Par défaut
    #include "aller_arobase.h"

  3. #3
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    Bonjour,

    Ce n'est pas du c++, mais du c.
    Ta gestion des inclusions (tout dans le main) ne me parait pas optimal.
    Enfin ton problème (undefined reference to `aller_arobase(_IO_FILE* ) vient de l'edition de lien qui est mal faites, sans doute pas de tes sources.

    Voilà un exemple de makefile pour ton projet.
    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
     
    NOM = test		#nom de l'executable
    VERSION = 0.1			#version
     
    REP_EXEC = .			#repertoire de l'executable
     
    CXXFLAGS = -Wall		#options de compilation
    CC = gcc -c		#outil de compilation
    LDFLAGS =				#options d'edition des liens
    LD = gcc			#outil d'edition des liens
     
    #Liste des objets à lies pour produire l'executable
    OBJETS      = main.o aller_arobase.o chaine2int.o fonctions.o lire_ident.o rediriger_ident.o
     
     
    #Regle generale de production des objets
    %.o: %.cpp %.h
    	$(CC) $(CXXFLAGS) $< -o $@
     
    #Regle de production de l'executable
    $(REP_EXEC)/$(NOM)$(VERSION): $(OBJETS)
    	$(LD) $(LDFLAGS) $^ -o $@
     
    #Autres dépendances (chaque objet devra etre recompiler si les dépendances sont modifiees)
    main.o: aller_arobase.h
    aller_arobase.o: lire_ident.h
    lire_ident.o: rediriger_ident.h
    rediriger_ident.o: chaine2int.h fonctions.h
    chaine2int.o: baba.h
    fonctions.o:
    J'ai l'impression que ton code n'est pas corect, j'ai des erreurs avec gcc 4.0.1, mais bon le makefile à peut être des petits soucis.

    Si tu ne comprends pas le fonctionement des makefile, tu peux trouver des informations ici:
    http://gl.developpez.com/tutoriel/outil/makefile/
    http://linux.developpez.com/faq/?page=devel
    et pis tu as toujours google.

  4. #4
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 113
    Points : 48
    Points
    48
    Par défaut
    Petit problème de compilation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    tux@mhz3:/mnt/dusb/sdb1/programmation/teletransmission/cpp$ make
    gcc -c       -Wall       main.cpp -o main.o
    gcc -c       -Wall       aller_arobase.cpp -o aller_arobase.o
    gcc -c       -Wall       chaine2int.cpp -o chaine2int.o
    gcc -c       -Wall       fonctions.cpp -o fonctions.o
    gcc -c       -Wall       lire_ident.cpp -o lire_ident.o
    gcc -c       -Wall       rediriger_ident.cpp -o rediriger_ident.o
    gcc           main.o aller_arobase.o chaine2int.o fonctions.o lire_ident.o rediriger_ident.o -o /0.1
    /usr/lib/gcc/i486-slackware-linux/3.4.5/../../../../i486-slackware-linux/bin/ld: ne peut ouvrir le fichier de sortie /0.1: Permission non accordée
    collect2: ld a retourné 1 code d'état d'exécution
    make: *** [/0.1] Erreur 1
    tux@mhz3:/mnt/dusb/sdb1/programmation/teletransmission/cpp$
    A l'aide !!!!!

    merci !

  5. #5
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    J'avais dit que j'avais fais le makefile vite fait, il fallait pas tout recopier sans réfléchir...

    En fait enlève les commentaires # en fin de ligne, et supprime les tabulation avant les =.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    NOM = test
    VERSION = 0.1
     
    REP_EXEC = .
     
    CXXFLAGS = -Wall
    CC = g++ -c
    LDFLAGS =
    LD = g++
     
    #Liste des objets à lies pour produire l'executable
    OBJETS = ...
    modifie aussi ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $(REP_EXEC)/$(NOM)$(VERSION)
    remplace le par ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $(REP_EXEC)/$(NOM).$(VERSION)
    Si tu regarde la ligne:
    gcc main.o aller_arobase.o chaine2int.o fonctions.o lire_ident.o rediriger_ident.o -o /0.1
    , tu vois qu'il y a un problème avec le nom de l'éxécutable...

  6. #6
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 113
    Points : 48
    Points
    48
    Par défaut
    Je te remercie pour ton aide, et je suis désolé de ne pas avoir réfléchi, mais en fait, depuis tout à l'heure je suis aux journées portes ouvertes de mon IUT et donc j'ai fait un copier coller et j'ai rajouté les tabulations...

    Bon, j'ai corrigé comme tu me l'as dit, mais voici ce que j'ai maintenant.

    en fait, cpt_zone est un entier, que j'ai défini en tant que variable globale car je l'utilise dans plusieurs fonctions, dans tout le programme.

    Comment faire pour résoudre ce pb???

    Merci !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    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
    tux@mhz3:/mnt/dusb/sdb1/programmation/teletransmission/cpp$ make
    g++ -c -Wall main.cpp -o main.o
    g++ -c -Wall aller_arobase.cpp -o aller_arobase.o
    g++ -c -Wall chaine2int.cpp -o chaine2int.o
    g++ -c -Wall fonctions.cpp -o fonctions.o
    g++ -c -Wall lire_ident.cpp -o lire_ident.o
    g++ -c -Wall rediriger_ident.cpp -o rediriger_ident.o
    g++   main.o aller_arobase.o chaine2int.o fonctions.o lire_ident.o rediriger_ident.o -o test.0.1
    aller_arobase.o(.data+0x0): définitions multiples de « cpt_zone »
    main.o(.data+0x0): défini pour la première fois ici
    fonctions.o(.data+0x0): définitions multiples de « cpt_zone »
    main.o(.data+0x0): défini pour la première fois ici
    lire_ident.o(.data+0x0): définitions multiples de « cpt_zone »
    main.o(.data+0x0): défini pour la première fois ici
    rediriger_ident.o(.data+0x0): définitions multiples de « cpt_zone »
    main.o(.data+0x0): défini pour la première fois ici
    collect2: ld a retourné 1 code d'état d'exécution
    make: *** [test.0.1] Erreur 1
    tux@mhz3:/mnt/dusb/sdb1/programmation/teletransmission/cpp$

  7. #7
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Regarde le mot clef extern
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  8. #8
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 113
    Points : 48
    Points
    48
    Par défaut
    Ca commence à me souler...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [philippe@unika cpp]$ make
    g++ -c -Wall aller_arobase.cpp -o aller_arobase.o
    g++ -c -Wall lire_ident.cpp -o lire_ident.o
    g++   main.o aller_arobase.o chaine2int.o fonctions.o lire_ident.o rediriger_ident.o -o test.0.1
    lire_ident.o: In function `lire_ident(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, _IO_FILE*)':
    lire_ident.cpp:(.text+0x192): undefined reference to `cpt_zone'
    lire_ident.cpp:(.text+0x198): undefined reference to `cpt_zone'
    lire_ident.cpp:(.text+0x1b5): undefined reference to `cpt_zone'
    lire_ident.cpp:(.text+0x1bb): undefined reference to `cpt_zone'
    collect2: ld returned 1 exit status
    make: *** [test.0.1] Erreur 1
    [philippe@unika cpp]$
    Sachant que j'ai rajouté extern int cpt_zone; dans ma procédure void lire_ident(string zone, FILE *f) du fichier lire_ident.cpp

    Je ne comprends plus la...

    Merci de m'aider encore....

  9. #9
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 113
    Points : 48
    Points
    48
    Par défaut
    J'ai trouvé !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    il fallait mettre int cpt_zone = 1; dans le fichier main.cpp, mais pas dans le int main... juste avant, en tant que variable globale.


    Merci à tous !

    Franchement, vous êtes GE-NIAUX ! lol

    Merci

  10. #10
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/12/2010, 22h08
  2. Problème de compilation à cause du CLASSPATH?
    Par miniRoshan dans le forum Général Java
    Réponses: 7
    Dernier message: 26/04/2010, 15h02
  3. [AC-2007] problème de suppression à cause d'une apostrophe
    Par MAMANHOU dans le forum IHM
    Réponses: 2
    Dernier message: 17/04/2009, 15h50
  4. Problème d'insertion à cause d'une CI
    Par Aragorn) dans le forum Langage SQL
    Réponses: 6
    Dernier message: 04/01/2008, 12h51
  5. Réponses: 11
    Dernier message: 31/08/2007, 10h11

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