Problème avec l'assemblage des fichiers objets
CrazyGeekMan
Messages postés
971
Statut
Membre
-
Dalfab Messages postés 720 Statut Membre -
Dalfab Messages postés 720 Statut Membre -
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.