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] undefined reference to


Sujet :

C

  1. #1
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut [compilation] undefined reference to
    Bonjour,

    Lors de la compilation de mon programme, j'obtien des erreurs que je ne sais expliquer.

    J'aimerais que vous puissiez me faire comprendre d'où elles viennent et comment y remédier.

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ gcc main.c
    /tmp/ccOflUrs.o: In function `envoyer_trame':
    main.c:(.text+0xaf): undefined reference to `get_eth_addr'
    main.c:(.text+0xe1): undefined reference to `make_ping_request'
    main.c:(.text+0x106): undefined reference to `write_eth_frame'
    /tmp/ccOflUrs.o: In function `main':
    main.c:(.text+0x155): undefined reference to `open_interface'
    collect2: ld a retourné 1 code d'état d'exécution

    Peut être mon code vous sera-t-il nécessaire mais je ne vois pas bien quelle partie.

    A savoir, les fonctions get_eth_addr, make_ping_request ainsiq ue write_eth_frame se trouvent dans un fichier inclu via

    La première fonction mise en erreur par le compilateur est une fonction déclarée avant le main de mon programme.

    Code c : 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
     
    #include	<stdio.h>								//Appel de la librairie Input/Output
    #include	<string.h>								//Appel de la librairie String
    #include	"eth_lib.h"								//Appel d'un fichier de manipulation de trames Ethernet
     
    /* Debut de la Procedure d'envoi d'une trame ethernet */
    void envoyer_trame (char* adresseDestination , char* message, int fd ) {
    	//corps de la fonction
     
    }
    /*Fin de la Procedure d'envoi d'une trame ethernet*/
     
     
    int main(void){
    //corps du main
    }

    Merci de votre aide
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Ce n'est pas une erreur de compilation, mais d'édition de liens.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Ce n'est pas une erreur de compilation, mais d'édition de liens.
    Pour corriger le problème, il faut donc lier en précisant au lieur où trouver les fonctions manquantes.

    Si elles sont dans une bibliothèque externe, on utilise -L et -l
    ex : on lie la bibliothèque libtata.a au fichier object toto.o
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc toto.o -o toto -ltata -L/chemin/de/tata
    Si elles sont dans un autre fichier source, il faut lier les fichiers ensemble
    ex : on lie les fichier toto.o et titi.o
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc toto.o titi.o -o toto
    Peux tu nous montrer ton fichier Makefile ?

  4. #4
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut
    Bien sûr

    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
    31
    32
     
    CC = gcc
    CFLAGS = -O3
    LDFLAGS =
     
    .PHONY:  all clean
     
    LIB = eth_lib.o
    SNIFF = sniff
    WRITE_ETH_FRAME = write_eth_frame
     
    all : $(LIB) $(SNIFF) $(WRITE_ETH_FRAME)
     
    lib : $(LIB)
     
    $(LIB) : eth_lib.c eth_lib.h inet_str.h
    	$(CC) -c $(CFLAGS) eth_lib.c
     
    $(SNIFF) : $(LIB) sniff.c
    	$(CC) -c $(CFLAGS) sniff.c
    	$(CC) $(LDFLAGS) sniff.o $(LIB) -o $@
     
    $(WRITE_ETH_FRAME) : $(LIB) write_eth_frame.c
    	$(CC) -c $(CFLAGS) write_eth_frame.c
    	$(CC) $(LDFLAGS) write_eth_frame.o $(LIB) -o $@
     
    main : $(LIB) main.c
    	$(CC) -c $(CFLAGS) main.c
    	$(CC) $(LDFLAGS) main.o $(LIB) -o $@
    clean:
    	rm -rf *.o
    	rm -rf $(WRITE_ETH_FRAME) $(SNIFF)
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  5. #5
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,
    Si tu tapes suivit de Que se passe-t-il ?

  6. #6
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut
    Bonjour,

    Il me sort des erreurs relatives à un fichier qui m'a été fournit tel quel.
    Ce fichier m'a été fournit par mon professeur de réseau...
    (Je ne sais pas s'il y a eu des modifications dans ce fichier pendant une absence de devant mon pc mais il me semble qu'il marchait avant :s)

    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
    31
    32
    $ make lib
    gcc -c -O3 eth_lib.c
    eth_lib.c: Dans la fonction «open_interface» :
    eth_lib.c:129: erreur: «SIOCGIFFLAGS» undeclared (first use in this function)
    eth_lib.c:129: erreur: (Each undeclared identifier is reported only once
    eth_lib.c:129: erreur: for each function it appears in.)
    eth_lib.c:137: erreur: «SIOCSIFFLAGS» undeclared (first use in this function)
    eth_lib.c: Dans la fonction «get_eth_addr» :
    eth_lib.c:204: erreur: «SIOCGIFHWADDR» undeclared (first use in this function)
    eth_lib.c: Hors de toute fonction :
    eth_lib.c:343: erreur: redefinition of «lire_bits»
    inet_str.h:70: erreur: previous definition of «lire_bits» was here
    eth_lib.c:357: erreur: redefinition of «get_buf»
    inet_str.h:84: erreur: previous definition of «get_buf» was here
    make: *** [eth_lib.o] Erreur 1
     
     
    $ make main
    gcc -c -O3 eth_lib.c
    eth_lib.c: Dans la fonction «open_interface» :
    eth_lib.c:129: erreur: «SIOCGIFFLAGS» undeclared (first use in this function)
    eth_lib.c:129: erreur: (Each undeclared identifier is reported only once
    eth_lib.c:129: erreur: for each function it appears in.)
    eth_lib.c:137: erreur: «SIOCSIFFLAGS» undeclared (first use in this function)
    eth_lib.c: Dans la fonction «get_eth_addr» :
    eth_lib.c:204: erreur: «SIOCGIFHWADDR» undeclared (first use in this function)
    eth_lib.c: Hors de toute fonction :
    eth_lib.c:343: erreur: redefinition of «lire_bits»
    inet_str.h:70: erreur: previous definition of «lire_bits» was here
    eth_lib.c:357: erreur: redefinition of «get_buf»
    inet_str.h:84: erreur: previous definition of «get_buf» was here
    make: *** [eth_lib.o] Erreur 1
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  7. #7
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par Deallyra Voir le message
    Il me sort des erreurs relatives à un fichier qui m'a été fournit tel quel.
    Ce fichier m'a été fournit par mon professeur de réseau...
    Faudra que la compilation de eth_lib.c fonctionne avant d'envisager de lier correctement main

    Citation Envoyé par Deallyra Voir le message
    Je ne sais pas s'il y a eu des modifications dans ce fichier pendant une absence de devant mon pc mais il me semble qu'il marchait avant
    Les suppositions, c'est bien, les certitudes, c'est mieux.

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

Discussions similaires

  1. Erreur de compilation "undefined reference"
    Par aljekeny dans le forum Débuter
    Réponses: 14
    Dernier message: 06/01/2009, 11h14
  2. problème de compilation "undefined reference to"
    Par grabriel dans le forum Code::Blocks
    Réponses: 0
    Dernier message: 05/05/2008, 12h08
  3. Probleme de compilation (undefined reference to)
    Par Verbalinsurection dans le forum C++
    Réponses: 9
    Dernier message: 01/10/2007, 10h50
  4. [Compilation] undefined reference
    Par Valkirion dans le forum C++
    Réponses: 1
    Dernier message: 13/07/2007, 18h03
  5. Erreur compilation "undefined reference to "
    Par ViRouF dans le forum C++
    Réponses: 5
    Dernier message: 02/03/2007, 14h55

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