Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 22/12/2006, à 03:44

dialloma

[RESOLU] Problème de compilation séparée en C

Bonjour à tous, j'ai un petit problème de compilation séparée en c. Voici le problème:

1. J'ai un fichier A.h dans lequel j'ai défini une structure (liste chainée) et les prototypes de certaines fonctions (insertion affichage de la liste etc...)
2. Un autre fichier A.c qui le code des fonctions définies dans A.h avec biensûr #include "A.h"
3. Un 3ème finchier main.c qui appelle les fonctions codées dans A.c
Je compile avec un Makefile.

Mon problème est que quand j'appelle ces fonctions dans la main, j'ai une erreur du type:
reference indéfinie vers la fonction : "nom des la fonction appellé".
Pourtant ces fonctions sont bien définies avec le mot clé extern devant leurs noms. Concètement voici le problème:
1. A.h

typedef struct Liste{
    int val;
    struct Liste *suiv;
}Liste;

extern void f1();
extern void f2();

2. A.c

#include "A.h"
void f1(){
//code de la fonction f1()
}

void f2(){
//code de la fonction f2()
}

3. main.c

#include "A.h"
int main(void){
f1();
f2();

return 0;
}

Et à la compilation ça me met

:main.c:(.text+0x83): undefined reference to 'f1'
:main.c:(.text+0x83): undefined reference to 'f2'

Mais quand je mets les fonction dans le main, ça marche bien. Donc le problème se trouve dans l'utilisation de extern peut être. Pourriez-vous s'il vous plait m'aider.
Merci d'avance

Dernière modification par dialloma (Le 22/12/2006, à 12:23)

Hors ligne

#2 Le 22/12/2006, à 04:31

mr_pouit

Re : [RESOLU] Problème de compilation séparée en C

Le problème n'est pas au niveau de la compilation, mais de l'édition des liens (quand il cherche ses petits pour créer le binaire final).

$ gcc main.c
/tmp/ccymKfus.o: In function `main':
main.c:(.text+0x12): undefined reference to `f1'
main.c:(.text+0x17): undefined reference to `f2'
collect2: ld returned 1 exit status
$

Il manque l'objet translatable A.o (voilà pourquoi au final il ne trouve pas f1 et f2 : il cherche les références à f1 et f2, mais A.o n'existe pas, donc il ne peut pas lier)

$ gcc A.c main.c
$

fonctionnera. smile

Ou encore (pour décomposer le processus)

$ gcc -c A.c main.c # création des objets A.o et main.o
$ gcc A.o main.o # édition des liens

Hors ligne

#3 Le 22/12/2006, à 12:23

dialloma

Re : [RESOLU] Problème de compilation séparée en C

Merci beaucoup mr_pouit. Effectivement le problème se trouvait au niveau de l'édition des liens. Et là j'ai révu mon Makefile, et ça marche. Merci beaucoup.
Merci merci et merci big_smile

Hors ligne