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 :

incompréhension: Undefined Reference to


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 22
    Par défaut incompréhension: Undefined Reference to
    Bonjour,

    Bon alors actuellement, nous sommes dans la réalisation d'un compilateur le projet avance pas mal jusqu'a cette grosse incompréhension:

    j'appelle une fonction dans mon fichier main (dans une fonction nommée ajouter_element): add_in_R_Index

    ce fichier main inclut bien main.h qui lui fera appel au table_representation dans lequel je déclare le prototype de mon add_in_R_Index.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ~/Compi/Projet# gcc -Wall main.c table_lexicographique.o table_declaration.o 
    table_representation.o Rlist.o DList.o Llist.o
     
    /tmp/ccmUiAih.o: In function `ajouter_element':
    main.c:(.text+0x3bc): undefined reference to `add_in_R_Index'
    collect2: ld returned 1 exit status
    main.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #include "table_lexicographique.h"
    #include "table_declaration.h"
    #include "table_representation.h"
     
    int taille_tableau(int num_lex,Rlist l,DList d);
    int ajouter_element(H_Index* hashtable, R_Index Rtable, D_Index declar, Type what, char* lexeme,int type_var,int nb_param,...);

    main.c
    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
     
    // Je ne met que la portion de fonction qui pose problème
     
      /* ajout de l'element dans la table des representations si c'est pas une variable */
     
      if(what!=VARIABLE)
        {
          va_list ap;
          va_start(ap,nb_param);
          int* tab=(int*)malloc(sizeof(int)*nb_param);
          int i=0;
          for(;i<nb_param;i++)
    	{
    	  tab[i]=va_arg(ap,int);
    	}
          va_end(ap);
          represent* ajout = init_represent(what,num_lex,nb_param,tab);
          add_in_R_Index(ajout,Rtable);
        } 
      /* fin ajout table des representation */

    table_representation.h

    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
     
    #ifndef ALLINC
    #include <stdio.h>
    #include <stdlib.h>
    #include "central.h"
    #define ALLINC 0
    #endif
    #include "Rlist.h"
     
    struct Rp_Index
    {
      Rlist first;
    };
     
    typedef struct Rp_Index* R_Index;
    void add_in_R_Index(represent* rep, R_Index table);
    R_Index init_R_Index();
    void affiche_R_Index(R_Index table);

    table_representation.c

    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
     
    #include "table_representation.h"
     
    R_Index init_R_Index()
    {
      R_Index ind=(R_Index)malloc(sizeof(struct Rp_Index));
      ind->first=init_Rlist();
      return(ind);
    }
     
    void affiche_R_Index(R_Index table)
    {
      affiche_Rlist(table->first);
    }
     
    void add_in_R_index(represent* rep, R_Index table)
    {
      table->first=Radd(rep,table->first);
    }
    et excepté string.h et stdarg.h je n'utilise aucune librairie exotique =)

    Merci par avance a qui pourra nous aider a résoudre cette erreur... ( nous nous excusons par avance si c'est un erreur con... ^^' )

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 329
    Par défaut
    Citation Envoyé par astyan42 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ~/Compi/Projet# gcc -Wall main.c table_lexicographique.o table_declaration.o 
    table_representation.o Rlist.o DList.o Llist.o
     
    /tmp/ccmUiAih.o: In function `ajouter_element':
    main.c:(.text+0x3bc): undefined reference to `add_in_R_Index'
    collect2: ld returned 1 exit status
    Pour déboguer, commencer par compiler les .c au lieu des .o , ça évite d'avoir des .o pas à jour par rapport aux sources.

    Ensuite il y a objdump sur les .o pour voir vraiment quel symboles ils exportent.

  3. #3
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 22
    Par défaut
    ben j'avais déjà fait ca avant compiler les .c pour vérifier si tout fonctionne indépendemment ?(parce que ca je l'ai fait)
    en revanche objdump je connais pas ca fonctionne comment ?

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 329
    Par défaut
    objdump --help
    ou
    man objdump

    Ce qui t'intéresse c'est la table des symboles.


    pour la ligne de compil, je maintiens que tu n'as pas d'intérêt à passer par des .o pour le peu de fichier que tu as et que tant que tu debug tu ferais mieux de recompiler les .c

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ~/Compi/Projet# gcc -Wall main.c table_lexicographique.c table_declaration.c  table_representation.c Rlist.c DList.c Llist.c

  5. #5
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 22
    Par défaut
    okay, merci, ben écoute je teste ca dans la soirée et je vous tiens au courant

  6. #6
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 22
    Par défaut
    Désolé pour le double post...

    Bon, je viens d'essayer le objdump.
    en sortant la table des symboles de mon fichier table_representation, j'ai été étonné qu'il me dise que mon add_in_R_Index existait bel et bien...
    J'ai donc poussé jusqu'à copier coller ma fonction add_in_R_Index dans mon main, et j'obtiens ceci...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    00000086 g     F .text  00000023 add_in_R_index
    // et un peu plus loin
    00000000         *UND*  00000000 add_in_R_Index
    Je commence a venir faire mon rapport quand je me rend compte que l'un a un "i" majuscule et que l'autre est minuscule
    ==> ou l'art de passer 2 jours sur une erreurs débile -_-

    (merci de m'avoir répondu et merci pour l'astuce du objdump )

+ 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. Réponses: 5
    Dernier message: 27/03/2009, 19h48
  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