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 :

reference indefinie vers


Sujet :

C

  1. #1
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 241
    Points : 272
    Points
    272
    Par défaut reference indefinie vers
    Bonjour,

    Lorsque je compile mon prog j'ai :
    BinVersRaw.c: (.text+0x1a3): référence indéfinie vers « Lecture_Image_1_Canal »
    BinVersRaw.c: (.text+0x1d1): référence indéfinie vers « Ecriture_Image_1_Canal »
    collect2: ld returned 1 exit status

    Et je ne vois pas d'ou cela vient. J'ai bien mis le include .h dans lequel se situe la spécification de ces fonctions.

    Merci

  2. #2
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    à priori c'est qu'il ne trouve pas la fonction.

    Est-elle dans le bon répertoire ? spécifié dans le Makefile ?
    N'y at-il pas une faute d'orthographe ?
    N'est-elle pas déclarée statique ?

    Sans un bout de code, on ne peut pas en dire plus..

  3. #3
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 241
    Points : 272
    Points
    272
    Par défaut
    Tout est dans le meme dossier.

    A priori elle n'est pas mal écrite car au début j'ai eu quelques erreurs de compilation au niveau des paramètres que je lui passai.

    Pour ce qui est du static je ne pense pas ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void Lecture_Image_1_Canal(FILE *fichima,
                     int NoLig, int NbCol,
                     int tfen, float *NLignesIma[],
                     int Type_Can);
    void Ecriture_Image_1_Canal(FILE *fichima,
                    int NbCol, float *NLignesIma,
                    int Type_Can);
    Ceci étant la spécifictaion du .h .
    et je l'utilise de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Lecture_Image_1_Canal(imgBin,i,nbCol,1,ligneIma,3);
    Ecriture_Image_1_Canal(imgRaw,nbCol,ligneIma[j],3);
    Les paramètres sont bien déclarés (pas d'erreur autre que celles mentionné av)

    Merci

  4. #4
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    et le code où c'est inclus ?

    Et le makefile ?

  5. #5
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 241
    Points : 272
    Points
    272
    Par défaut
    désolé ..

    makefile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    BinVersRaw.exe: BinVersRaw.o
        gcc -o BinVersRaw.exe BinVersRaw.o
    BinVersRaw.o: BinVersRaw.c outils_c.o lect_ima.o
        gcc -c BinVersRaw.c
    nrutil.o: nrutil.c nrutil.h
        gcc -c nrutil.c
    outil_c.o: outils_c.c outils_c.h nrutil.h
        gcc -c outils_c.c
    lect_ima.o: lect_ima.c lect_ima.c nrutil.h
        gcc -c lect_ima.c
    Pour mon code je vais pas tout mettre ça serai trop long :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include"outils_c.h"
    #include"lect_ima.h" //fichier contenant les fonctions qui nous interresse
    #include<stdio.h>
    for(i=0;i<nbLig;i++)
        {
            Lecture_Image_1_Canal(imgBin,i,nbCol,1,ligneIma,3);
            for(j=0;j<nbCol;j++)
            {
                Ecriture_Image_1_Canal(imgRaw,nbCol,ligneIma[j],3);
            }
        }
    Pareil pour l'implémentation des fonctions, il y a un switch suivant le dernier paramètres je te mets donc la partie qui m'interresse:
    pour écriture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for (k=0;k<NbCol;k++)
                        {
                            val = (int)ceil(NLignesIma[j][k]-0.5);
                            temp = (int)(val/256);
                            LigneOctets[2*k] = (unsigned char)temp;
                            temp = val % 256;
                            LigneOctets[2*k+1] = (unsigned char)temp;
                        }
                        fwrite(LigneOctets,1,2*NbCol,fichima[j]);
    pour lecture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    dep=(long)(NoLig*NbCol*2);
                fseek(fichima,dep,SEEK_SET);
                for (i=0;i<tfen;i++)
                {
                    fread(LigneOctets,1,2*NbCol,fichima);
                    for (k=0;k<NbCol;k++)
                        NLignesIma[i][k] = (float)LigneOctets[2*k]*256+(float)LigneOctets[2*k+1];
                }

    Petite précision :
    Les fonctions de lecture et d'écriture ce n'est pas moi qui les ai écrit, elles m'ont été fournis par une tiers personne.

    Nous sommes 2 sur ce projet et je viens de regarder le makefile attentivement, il me semble que le problème vienne de la, j'essaye de corriger mais si tu vois des erreurs qui te sautent aux yeux (et a mon avis ça va etre le cas) je sui a ton écoute.

    Merci

  6. #6
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 241
    Points : 272
    Points
    272
    Par défaut
    Après retouche le makefile est :

    BinVersRaw.exe : BinVersRaw.o outils_c.o nrutil.o lect_ima.o

    gcc -o BinVersRaw.exe BinVersRaw.o outils_c.o nrutil.o lect_ima.o

    nrutil.o : nrutil.c nrutil.h

    gcc -c nrutil.c

    outil_c.o : outils_c.c outils_c.h nrutil.h

    gcc -c outils_c.c


    lect_ima.o : lect_ima.c nrutil.h lect_ima.h

    gcc -c lect_ima.c
    BinVersRaw.o : BinVersRaw.c

    gcc -c BinVersRaw.c

    Mais le probleme subsiste seulement la référence indéfinie ne vient plus du meme endroit.

    lect_ima.o: In function `Ecriture_Image_1_Canal':
    lect_ima.c: (.text+0xad9): référence indéfinie vers « ceil »
    lect_ima.c: (.text+0xb70): référence indéfinie vers « ceil »

  7. #7
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut

    dans lect_ima.c

    et flag -lm dans la ligne de compile

  8. #8
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 241
    Points : 272
    Points
    272
    Par défaut
    Il sert à quoi le -lm stp? (g été débordé par le man de gcc ...)

    En tout cas un grand merci à toi ça compile (jusqu'au prochaine modif )

    Merci

  9. #9
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    -lm donne le lien pour la librairie mathématique...

    /usr/lib/libm.a ou /usr/lib/libm.so

    Note :

    et ajoute la balise code dans tes posts ci-dessus stp..


    Et n'oublie pas non plus

  10. #10
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 241
    Points : 272
    Points
    272
    Par défaut
    OK merci beaucoup pour tes réponses claires (meme si mes explications étaient quelque peu confuses)

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par psylox
    Et je ne vois pas d'ou cela vient. J'ai bien mis le include .h dans lequel se situe la spécification de ces fonctions.
    Dans un .h, on ne met pas la définition des fonctions, mais les prototypes (et ce qui sert à les définir).

    La définition se met dans un .c que l'on compile séparément et que l'on lie au projet.

  12. #12
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 241
    Points : 272
    Points
    272
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Dans un .h, on ne met pas la définition des fonctions, mais les prototypes (et ce qui sert à les définir).

    La définition se met dans un .c que l'on compile séparément et que l'on lie au projet.

    Oui merci je le sais spécification --> .h et implémentation --> .c

  13. #13
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par psylox
    Oui merci je le sais spécification --> .h et implémentation --> .c
    C'est pas 'spécifications', mais interface...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quelle Reference Vers un MS Office Version X
    Par aeroox dans le forum VB.NET
    Réponses: 4
    Dernier message: 02/06/2008, 20h48
  2. Réponses: 1
    Dernier message: 24/12/2007, 10h11
  3. [Debutant]Refence indefinie vers « pow »
    Par Invité dans le forum Débuter
    Réponses: 4
    Dernier message: 01/06/2007, 14h24
  4. Réponses: 2
    Dernier message: 28/02/2007, 03h39
  5. Réfèrence indefinie dans mon makefile
    Par legend666 dans le forum Linux
    Réponses: 2
    Dernier message: 21/11/2005, 20h58

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