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 :

undefined reference to 'ma_fonction'


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut undefined reference to 'ma_fonction'
    Amis programmeur bonjour ,

    Voici mon problème:

    J'ai les fichiers suivant dans le même dossier: main.c, fonctions.c et fonctions.h
    Dans fonctions.c et main.c j'ai un #include "fonctions.h".
    Le fichier fonctions.h contient un typedef puis des prototypes de fonctions.

    Or, lorsque j'esssaye d'utiliser une fonction contenue dans fonction.c (dont le prototype est dans fonction.h) j'ai une erreur à la compilation qui me dit que la fonction n'est pas définie: undefined reference to 'fonction_qui_ne_connait_pas'.
    Je me suis donc dit qu'il y avait un problème au niveau des includes, cependant lorsque je déclare un élément du type que j'ai définis dans le typedef de fonction.h cela fonctionne!
    Je ne comprends vraiment pas d'où vient le problème...

    Merci d'avance de vos réponses.
    Dernière modification par Invité ; 12/02/2012 à 20h18.

  2. #2
    Membre chevronné
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Par défaut
    Tout porte à penser que tu n'as pas inclu fonctions.c dans ta compilation/linkage.
    Comment faire dépend de ton environnement de développement, mais par exemple avec un gcc en ligne de commande, je ferais ceci :
    gcc main.c fonctions.

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    petite remarque : il n'est pas forcément très rusé de définir un .h inclus dans le fichier qu'il décrit (exemple fonctions.h inclus dans fonctions.c)

    Les .h en général servent aux autres modules pour savoir ce que tel module contient comme fonctions appelables de l'extérieur

    Les typedefs et autres defines peuvent être mis dans un fichier .h à part (style "mycommon.h" ou "mydefs.h" ou "mystructs.h"), à inclure partout.

  4. #4
    Membre éclairé Avatar de aslo92
    Homme Profil pro
    Ingénieur développement logiciels temps réel
    Inscrit en
    Février 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels temps réel
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 43
    Par défaut
    Je pense comme phi1981, tu as dû oublier d'ajouter fonctions.c dans ton projet ou dans ton makefile.

    Autre possibilité, le nom de ta fonction dans le .c et dans le .h sont différents.
    Il se peut aussi que les arguments ne soient pas les mêmes...

    Sans voir le code, difficile à dire, on ne peut que supposer !

  5. #5
    Invité
    Invité(e)
    Par défaut
    Tout d'abord merci de vos réponses , voici mon makefile:

    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
     
    prog_arbre: arbre_GRD.o iterateurGRD.o main.o
    	gcc -o prog_arbre arbre_GRD.o main.o
     
    iterateurGRD.o: iterateurGRD.c iterateurGRD.h arbre_GRD.o
    	gcc -c iterateurGRD.c -o iterateurGRD.o -Wall
     
    arbre_GRD.o: arbre_GRD.c arbre_GRD.h
    	gcc -c arbre_GRD.c -o arbre_GRD.o -Wall
     
    main.o: iterateurGRD.o main.c
    	gcc -c main.c -o main.o -Wall
     
    clean:
    	rm -f *.o
    Le fichier qui contient les fonctions non reconnues est iterateurGRD.c (et iterateurGRD.h).

  6. #6
    Membre éclairé Avatar de mensoif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Par défaut
    Je vois plusieurs choses étranges.

    prog_arbre: arbre_GRD.o iterateurGRD.o main.o
    gcc -o prog_arbre arbre_GRD.o main.o iterateurGRD.o (manquant)

    iterateurGRD.o: iterateurGRD.c iterateurGRD.h arbre_GRD.o (en trop?)
    gcc -c iterateurGRD.c -o iterateurGRD.o -Wall

    arbre_GRD.o: arbre_GRD.c arbre_GRD.h
    gcc -c arbre_GRD.c -o arbre_GRD.o -Wall

    main.o: iterateurGRD.o (?) main.c
    gcc -c main.c -o main.o -Wall

    clean:
    rm -f *.o
    De plus, quels headers inclus-tu dans main.c ?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Merci beaucoup de ta réponse, en effet j'ai fait une erreur d’inattention --", il manquait mon iterateurGRD.o dans l'édition de lien.

    Sujet résolu !

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

Discussions similaires

  1. winsock.h : undefined reference...
    Par abraxas dans le forum Dev-C++
    Réponses: 14
    Dernier message: 06/08/2012, 13h42
  2. Undefined reference compilation réseau
    Par Ren97 dans le forum Dev-C++
    Réponses: 11
    Dernier message: 08/03/2005, 09h46
  3. Compilation de xmms : undefined reference to...
    Par Michaël dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 04/02/2005, 19h05
  4. undefined reference to `xmlParseFile'
    Par Clemaster dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 25/06/2004, 20h38
  5. g++ : undefined reference to ...
    Par le_barbu dans le forum Autres éditeurs
    Réponses: 16
    Dernier message: 14/05/2004, 07h23

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