Problème avec l'assemblage des fichiers objets
CrazyGeekMan
Messages postés
873
Date d'inscription
Statut
Membre
Dernière intervention
-
Dalfab Messages postés 706 Date d'inscription Statut Membre Dernière intervention -
Dalfab Messages postés 706 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je viens ici pour solliciter votre aide :)
Je suis en train de travailler sur les listes chaînées en compilant de manière séparée, la compilation se déroule sans soucis (*.c -> *.o) mais l'assemblage des fichiers *.o renvoie l'erreur :
main.o : Dans la fonction « main » :
main.c:(.text+0xe) : référence indéfinie vers « New_Liste »
collect2: error: ld returned 1 exit status
Pourtant j'ai bien définie la fonction New_Liste() dans Liste_chaine.c et inclue Liste_chaine.h dans le main.c :/
Voici mon code source (pour l'instant il n'a pas de grand intérêt) :
main.c :
Liste_chaine.c :
Liste_chaine.h :
Je vous prie de bien vouloir m'aider, merci :D !
Je viens ici pour solliciter votre aide :)
Je suis en train de travailler sur les listes chaînées en compilant de manière séparée, la compilation se déroule sans soucis (*.c -> *.o) mais l'assemblage des fichiers *.o renvoie l'erreur :
main.o : Dans la fonction « main » :
main.c:(.text+0xe) : référence indéfinie vers « New_Liste »
collect2: error: ld returned 1 exit status
Pourtant j'ai bien définie la fonction New_Liste() dans Liste_chaine.c et inclue Liste_chaine.h dans le main.c :/
Voici mon code source (pour l'instant il n'a pas de grand intérêt) :
main.c :
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "Liste_chaine.h" void main() { Liste *age = New_Liste(); free(age); }
Liste_chaine.c :
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "Liste_chaine.h" Liste *New_Liste() { Liste *liste = (Liste *) malloc(sizeof(Liste)); Element *element = (Element *) malloc(sizeof(Element)); if(element == NULL || liste == NULL) { printf("Problème d'allocation dynamique\n"); exit(0); } printf("Premier Prénom :\n"); scanf("%s",element -> age); element -> suivant = NULL; liste -> premier = element; return liste; }
Liste_chaine.h :
#ifndef LISTE_HEADER #define LISTE_HEADER #ifndef LISTE #define WHERE_LISTE extern #else #define WHERE_LISTE #endif typedef struct Element { char * age; struct Element *suivant; }Element; typedef struct Liste { struct Element *premier; }Liste; WHERE_LISTE Liste *New_Liste(); #endif
Je vous prie de bien vouloir m'aider, merci :D !
A voir également:
- Problème avec l'assemblage des fichiers objets
- Site pour vendre des objets d'occasion - Guide
- Renommer des fichiers en masse - Guide
- Fichiers epub - Guide
- Wetransfer gratuit fichiers lourd - Guide
- Explorateur de fichiers - Guide
2 réponses
Bonjour,
Erreur de jeunesse...
Pourquoi l'éditeur de lien coince ?
Tout simplement parce qu'il ne trouve pas 'New_Liste', du moins c'est ce qu'il dit et, comme d'habitude, il a raison de le dire.
Alors il faut simplement lui préciser où se trouve 'New_Liste'.
2 solutions:
- à la compilation: gcc -W main.c Liste_chaine.c
- en incluant dans le main: #include "Liste_chaine.c"
Bonne continuation.
Erreur de jeunesse...
Pourquoi l'éditeur de lien coince ?
Tout simplement parce qu'il ne trouve pas 'New_Liste', du moins c'est ce qu'il dit et, comme d'habitude, il a raison de le dire.
Alors il faut simplement lui préciser où se trouve 'New_Liste'.
2 solutions:
- à la compilation: gcc -W main.c Liste_chaine.c
- en incluant dans le main: #include "Liste_chaine.c"
Bonne continuation.
Bonjour,
tu écris "assemblage des fichiers *.o", es-tu sûr que les 2 fichiers sont bien les même que ceux compilés?
Attention, ligne 16 de Liste_chaine.c tu utilise un pointeur qui n'a jamais été initialisé, cela va faire de beaux dégâts.
Et dans l'entête, il y a un tout un micmac pour utiliser ou pas le mot extern devant une déclaration de fonction. Sachant que le mot extern devant une déclaration de fonction est totalement non significatif, il y a plus simple.
tu écris "assemblage des fichiers *.o", es-tu sûr que les 2 fichiers sont bien les même que ceux compilés?
Attention, ligne 16 de Liste_chaine.c tu utilise un pointeur qui n'a jamais été initialisé, cela va faire de beaux dégâts.
Et dans l'entête, il y a un tout un micmac pour utiliser ou pas le mot extern devant une déclaration de fonction. Sachant que le mot extern devant une déclaration de fonction est totalement non significatif, il y a plus simple.