Linker en C

Linker en C - C - Programmation

Marsh Posté le 26-01-2008 à 12:25:37    

Bonjour,
je suis novice en C et j'ai tenté de "compiler" plusieurs fichiers sans aucun succès avec à chaque fois :    
[Linker error] undefined reference to `initgn'  
[Linker error] undefined reference to `printgn'  
j'ai fait cela avec gcc sous linux (gcc -o main main.c) et avec dev-C++ sous window...même problème, il y a quelque chose que je dois ignorer mais quoi ?
 
voici mon main.c :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include "structure.h"
  5. int main(void){
  6.      GN nbre;
  7.      initgn(&nbre,tmax);
  8.      printgn(&nbre);
  9.      return 0;
  10. }


 mon struct.h

Code :
  1. #define tmax 100
  2. typedef struct{
  3.      int bit[tmax] ; //chiffres
  4.      int coma;       // virgule
  5.      char sg;        //signe
  6.      int ta;         //nombre de chiffres significatifs
  7. }GN;
  8. int printgn(GN*);
  9. int initgn(GN*,int);


 mon initgn.c

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include "structure.h"
  5. int initgn(GN *N,int T){
  6.      int i;
  7.      for(i=0;i<T;i++)
  8.    N->bit[i]=0;
  9.      N->sg = "+";
  10.      N->coma=1;
  11.      N->ta=1;
  12.      printf("\n%d",T);
  13.      return 1;
  14. }


Si quelqu'un a la bonté d'expliquer à un novice ce qui ne va pas...merci d'avance.

Reply

Marsh Posté le 26-01-2008 à 12:25:37   

Reply

Marsh Posté le 26-01-2008 à 12:38:35    

Justement, il faut d'abord compiler tes deux fichiers, et seulement ensuite les linker :

 

gcc -c initgn.c
gcc -c main.c
gcc -o main initgn.o main.o


Message édité par Elmoricq le 26-01-2008 à 12:38:52
Reply

Marsh Posté le 26-01-2008 à 12:52:22    

Merci infiniment pout ta réponse rapide !
En plus ça marche et je crois que j'ai compris !!
Encore merci Elmoricq !
Juste une dernière question : y a-t-il une commande pour "linker" plein de fichier ? parce que (je suis faineant) taper gcc -o main "puis tous les trucs .o" ça peut être long si il y en a plein

Reply

Marsh Posté le 26-01-2008 à 13:19:01    

gcc -o main *.c
 


Message édité par djobidjoba le 26-01-2008 à 13:21:14
Reply

Marsh Posté le 26-01-2008 à 13:28:31    

Bonjour,
et merci, j'aurais dû m'en douter...gcc -o main *.o

Reply

Marsh Posté le 26-01-2008 à 13:49:01    

Tu peux aussi faire un makefile hein! Ca t'evitera de tout recompiler a chaque fois...

Reply

Marsh Posté le 26-01-2008 à 13:58:04    

Un makefile ??? j'ai cherché sur le forum, je ne sais pas du tout ce que c'est...tu n'aurais pas lien internet qui explique ce que c'est et comment ca marche s'il te plait?

Reply

Marsh Posté le 26-01-2008 à 14:02:52    

cuati a écrit :

Un makefile ??? j'ai cherché sur le forum, je ne sais pas du tout ce que c'est...tu n'aurais pas lien internet qui explique ce que c'est et comment ca marche s'il te plait?


http://mapage.noos.fr/emdel/make.htm


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 26-01-2008 à 18:34:32    

Merci beaucoup Emmanuel Delahaye, très intéressant ce site et clair en plus !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed