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 :

Réference indéfinie vers..


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 21
    Points : 14
    Points
    14
    Par défaut Réference indéfinie vers..
    Bonjour, je travaille sur un projet en C, et lorsque je crée un script pour tester les différentes parties implémentes, j'ai le message d'erreur suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    /tmp/ccTOeFD9.o: dans la fonction « main »:
    test1.c:(.text+0x28): référence indéfinie vers « init »
    collect2: error: ld returned 1 exit status
    sachant que j'ai bien mis dans l'entete.

    Je précise que compile ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    clang -std=c99 -Wall -Wextra -g  -lm  test1.c   -o test1
    Merci d'avance

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Bonjour,

    Ton code fait appel à une fonction « init() » ou à une variable globale « init » définie soit dans ton code, soit dans un des fichiers *.h que tu inclus et tu as oublié de lier la bibliothèque concernée à ton projet. Il manque un « -lquelquechose » à ta ligne de commande.

    Impossible de te dire laquelle sans voir ton code.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 21
    Points : 14
    Points
    14
    Par défaut
    Init est bien une fonction. Comment déduire la lettre qui manque?

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    quelquechose est en fait le nom de la bibliothèque qui contient la fonction que tu veux utiliser, privé du préfixe lib et de ses extensions. Par exemple -lm lie ton programme à /usr/lib/libm.so, fichier rassemblant toutes les fonctions mathématiques de la bibliothèque standard du langage C.

    Par ailleurs, le C est sensible à la casse : init et Init ne sont pas la même chose.

    Montre-nous ton code ici (encadré par les balises [code] et [/code]) et nous tâcherons de t'aider.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 21
    Points : 14
    Points
    14
    Par défaut
    Voici la fonction dont il est question
    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
    36
    37
    38
    39
    40
     
    void init(struct list **liste, uint32_t size, uint32_t seg)
      // 
      if (*liste == NULL){
        *liste = malloc(2*sizeof(uint32_t));
      }
     
      struct list *pt2 = malloc(2*sizeof(uint32_t));
      struct list *pt3 = malloc(2*sizeof(uint32_t));
     
      uint32_t x_1 = (int) ((size - seg/2);
      uint32_t y_1 = (int) ((size + seg/2) ;
     
      uint32_t x_2 = x_1 + seg;
      uint32_t y_2 = y_1; 
     
      float dx, dy;
      dx = (float) x_1 - x_2; dy = (float) y_1 - y_2;
     
      // Calcul de x3
      float x3_tmpf = (x_1 + x_2)*cos(2*M_Pi/3);
      float x3_f = abs(x3_tmpf - dy*sin(2*M_Pi/3));
      uint32_t x_3 = (int) x3_f;
     
      // Calcul de y3
      float y3_tmpf = (y_1 + y_2)*cos(2*M_Pi/3);
      float y3_f = abs(y3_tmpf + dx*sin(2*M_Pi/3));
      uint32_t y_3 = (int) y3_f;
     
      // Attribution 
      (*liste)->x = x_1; (*liste)->y = y_1;
      pt2->x = x_2; pt2->y = y_2;
      pt3->x = x_3; pt3->y = y_3;
     
      // Chainage
      pt3->next = NULL;
      pt2->next = pt3;
      (*liste)->next = pt2;
     
    }

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Dans quel fichier est le code de la fonction init() ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 21
    Points : 14
    Points
    14
    Par défaut
    Elle est implémentée dans fonctions.c

  8. #8
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Bonjour,

    Citation Envoyé par Marrakchino Voir le message
    Elle est implémentée dans fonctions.c
    Dans ce cas, il faut compiler fonctions.c de la même façon que tu compiles test1.c. Donc soit tu l'ajoutes à ta ligne de commande juste à coté, pour que le compilateur les compile tous les deux en même temps, soit tu fais de la compilation séparée et tu construis l'exécutable final, soit en passant le fichier objet *.o produit à la même ligne de commande, soit en utilisant l'éditeur de liens (linker) pour produire l'exécutable final.

    #include <..> est incorrect en soi et ne fait probablement pas ce que tu penses. include ne sert pas à impliquer directement une bibliothèque comme on le ferait avec import dans d'autres langages. Il ne sert qu'à insérer le contenu d'un fichier tiers là où on l'appelle. Et la plupart du temps, on l'utilise pour insérer un fichier « *.h » fourni avec ladite bibliothèque, lequel explique au compilateur comment l'utiliser (en déclarant les ressources visibles de l'extérieur, soit les variables globales et les prototypes de fonctions). Le compilateur est donc en mesure de produire du code s'appuyant sur cette bibliothèque sans l'avoir nécessairement sous le coude, mais il reste à la charge du programmeur d'assembler tous les composants à la fin.

Discussions similaires

  1. référence indéfinie vers.
    Par étoile de mer dans le forum GTK+
    Réponses: 3
    Dernier message: 21/03/2014, 14h22
  2. référence indéfinie vers « _imp__Py_SetProgramName »
    Par ttf dans le forum Interfaçage autre langage
    Réponses: 5
    Dernier message: 29/03/2011, 14h01
  3. Réponses: 2
    Dernier message: 08/03/2010, 17h00
  4. référence indéfinie vers « vtable for FenPrincipale
    Par yLaplace dans le forum Débuter
    Réponses: 5
    Dernier message: 01/03/2010, 13h49
  5. Réponses: 10
    Dernier message: 02/01/2007, 12h07

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