IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Problème de compilation


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Par défaut Problème de compilation
    Bonjour à tous,
    J'ai un problème de compilation. Voici les détails :

    Le fichier d'entete est Test.h, il contient l'entete de la fonction decodageMessage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CR_{ASTERIX decodageMessage();
    CR_ASTERIX est un "typedef enum " définissant les différents codes retour des fonctions.
    Il est defini dans une librairie écrite en C, dans un repertoire dans la racine /communs/Librairie/Include

    Le fichier .c contient le corps de la fonction decodageMessage et le main

    Test.c


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    CR_ASTERIX decodageMessage()			      
    {
     
      CR_ASTERIX initDecodeur = InitialiseDecodeur();
     
      if (initDecodeur == AST_OK)
        {
          printf("Initialisation du decodeur OK \n");
        }  
      else
        {
          printf("Problème init décodage \n");
        }
     
     return initDecodeur;
    }
     
    int 
    main(int argc, char * argv[]){
     
      int Action = 0;
     
      printf("L'action à effectuer est: \n");
      scanf("%d",&Action);
     
      switch(Action)
        {
        case '0' : decodageMessage(); break;
        case '1' : /*une autre fonction*/;break;	
        } 
      return 0;
     
    }
    La fonction InitialiserDecodeur () est écrite dans ../include dans le fichier Decode.c

    La compilation de ce bout de programme se fait sur une machine linux 64bit, à l'aide du compilateur g++ (le source est en c mais les fonctions appelées derrière sont en
    partie en C++.

    Le makefile utilisé est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    CXX	=	g++
    LD	=	$(CXX)
     
    RM	=	$(shell which rm) -rf
     
    INCLUDE	=	-I../include	\
    		-I${EDASTXPATH}/INCLUDE
     
    LIB	=	\
    		-L../lib	\
    		-L/usr/X11R6/lib64	\
    		-L/communs/Librairie/LIB
     
    LIBS	=	-lLib 	
     
    FLAGS	=	-g -Wall ${INCLUDE} ${LIB}
     
    default:
    	@echo "Make all par defaut"
    	make all
     
    all: Test
     
    Test: Test.o 
    	@${CXX} ${FLAGS} -o Test Test.o ${LIBS}
     
    Test.o: Test.c Test.h
    	@${LD} ${FLAGS} -c Test.c
     
    clean:
    	@${RM} *.o
     
    mrproper: clean
    	@${RM}	Test
    Lors de la compilation, l'erreur suivante est affichée:
    Test.o(.text+0x50): In function `decodageMessage()':
    /communs/MODULE/TEST/Test.c:34: undefined reference to `InitialiseDecodeur()'
    La ligne 34 correspond à la ligne ou est appelée la fonction Initialiserdecodeur()

    Merci de m'aider à résoudre cette erreur. Je soupçonne le makefile vu la simplicité du code.
    Je suis débutante en makefile en plus, donc merci pour votre aide.
    Boheme83.

  2. #2
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Ne manquerait-il pas un prototype de InitialiseDecodeur() avant son appel?

  3. #3
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Tu ne compiles pas Decode.c visiblement ou alors tu ne le passes pas lors de l'édition des liens...

    Jc

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    ça serait pas l'ordre des répertoires d'include ?? Dans quel ordre se fait l'appel ? Est-ce que c'est une fonction figurant dans le 2ième chemin qui appelle la fonction en question située dans le premier ??

    [EDIT]
    scusez.. oubliez ce que j'ai dit ci-dessus...

    Plutot l'ordre des librairies et de leurs chemins ??

    Il faut savoir que l'ordre dans lequel on met les chemins et les librairies est l'ordre inverse : les plus "profondes" à la fin, les plus "en haut" au début...

    [/EDIT]

  5. #5
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Par défaut Problème de compilation
    La fonction InitialiserDecodeur() a bien un prototype, c'est du code existant (je ne fais que l'appeler).
    Elle est déclarée et définie dans Decode.c/.h. dans ../include
    Elle figue dans le premier fichier d'include et elle est appelée dans le fichier test.c du repertoire courant.
    Pour l'édition de liens. Ne suffit-il pas de mettre le ${FLAGS} qui contient les include pour faire l'édition des liens avec Decode.c?
    Merci

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    d'après ton makefile, ça va essayer de trouver la fonction dans libLib.a ou libLib.so, et ça va chercher d'abord dans ../lib puis dans /usr/X11R6/lib64 puis dans /communs/Librairie/LIB...

  7. #7
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Par défaut
    l'ordre des librairie est bon. de la moins profonde à la plus profonde en allant vers le bas.

Discussions similaires

  1. problème de compilation sous visual C++
    Par fabmili dans le forum MFC
    Réponses: 4
    Dernier message: 08/02/2004, 19h52
  2. problème de compil devc++ socket
    Par stefdem dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 11/12/2003, 11h33
  3. Réponses: 1
    Dernier message: 29/10/2003, 12h16
  4. Problème de compilation de la DLL du XMLRad
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 2
    Dernier message: 16/04/2003, 16h46
  5. Réponses: 1
    Dernier message: 27/05/2002, 01h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo