Problème avec l'assemblage des fichiers objets

Fermé
CrazyGeekMan Messages postés 872 Date d'inscription dimanche 1 novembre 2015 Statut Membre Dernière intervention 21 novembre 2024 - 6 déc. 2017 à 09:11
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 - 31 déc. 2017 à 03:07
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 :

#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:

2 réponses

loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
31 déc. 2017 à 00:14
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.
0
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
31 déc. 2017 à 03:07
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.
0