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 :

Erreur "undefined reference to" alors que j'ai importé ma librairie


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 171
    Par défaut Erreur "undefined reference to" alors que j'ai importé ma librairie
    Bonjour, lorsque j'essaie d'appeler une fonction dans mon code, j'obtiens l'erreur "undefined reference to 'leNomDeLaFonction'".

    Cependant j'ai bien importé la librairie correspondante, et je me sers deja de cette fonction ailleurs dans mon code.

    Sur la ligne en rouge j'obtiens l'erreur.

    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
    void StartReception(void)
    {
      pBufferReadyForReception = aRXBufferA;
      pBufferReadyForUser      = aRXBufferB;
      uwNbReceivedChars = 0;
      uwBufferReadyIndication = 0;
    
      /* Print user info on PC com port */
      PrintInfo(aTextInfoStart, sizeof(aTextInfoStart));
      LL_mDelay(100);
    
      LL_USART_ClearFlag_ORE(USARTx_INSTANCE);
    
      /* Enable RXNE and Error interrupts */
      LL_USART_EnableIT_RXNE(USARTx_INSTANCE);
      LL_USART_EnableIT_ERROR(USARTx_INSTANCE);
    }
    Alors que par exemple pour cette fonction la je n'ai pas d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void LED_Blinking(uint32_t Period)
    {
      /* Toggle LED2 in an infinite loop */
      while (1)
      {
        LL_GPIO_TogglePin(LED2_GPIO_PORT, LED2_PIN);  
        LL_mDelay(Period);
      }
    }
    Et les deux sont dans le meme code dans le meme fichier

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    « Importer » est un terme vide de sens en C, que voulais-tu dire ? As-tu précisé le chemin vers la bibliothèque en question auprès de l'éditeur de liens ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 171
    Par défaut
    Je sais pas comment le dire mais j'ai bien mis cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include "stm32l1xx_ll_utils.h"
    Sauf que je peux me servir des fonctions présentent dans ce .h seulement dans certaines fonctions de mon .c, par exemple dans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void LED_Blinking(uint32_t Period)
    ca fonctionne mais dans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void StartReception(void)
    ca ne fonctionne pas.

    En attendant j'ai utilise un autre timer directement dans mon main donc ca ne me pose plus de soucis mais c'est quand meme etrange comme comportement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while (1)
      {
    	  StartReception();
    	  HAL_Delay(5000);
    }

  4. #4
    Membre très actif
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : No Comment
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 548
    Par défaut
    Bonjour,
    C'est une erreur qui veut dire que vous n'avez pas fourni à votre compilateur du moins annoncé à votre compilateur que vous utilisez une bibliothèque X (la librairie qui va avec vos fichiers d’en-tête). Plus précisément vous utiliser les fichiers en-têtes sans pour autant effectuer un lien (-lxxxx) avec la bibliothèque et donc pas d'entrer dans la table de symboles.
    Pour remédier à cela, il vous faut compiler vos sources avec la bibliothèque fournie.

    À bientôt.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 171
    Par défaut
    Dans ce cas comment expliquer que l'erreur ne se produise qu'a un seul endroit du fichier et pas a chaque fois que je me sert de cette bibliotheque ?

  6. #6
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Citation Envoyé par sambia39 Voir le message
    Pour remédier à cela, il vous faut lier vos fichiers objet avec la bibliothèque fournie.
    FYP


    Pour obtenir un programme exécutable autonome, il ne suffit pas de fournir au compilateur les prototypes des fonctions que tu emploies, déclarées dans le fichier .h . Il faut ensuite fournir à l'éditeur de liens leurs « définition compilée » soit dans des fichiers objets, soit dans des fichiers de bibliothèques statiques ou dynamiques.

    Un prototype annonce seulement « la fonction foobar attend ceci et retourne cela », il ne dit pas ce que la fonction réalise précisément. C'est une « boîte noire ».

    Le modèle de compilation C est expliqué plus en détail par picodev dans la première moitié de ce message (clic !).

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 171
    Par défaut
    j'ai vraiment du mal a faire le lien entre tous les fichiers.. je vais voir ton lien

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

Discussions similaires

  1. [MySQL] réponse vide alors que le champs existe dans la table, sans retour d'erreur
    Par ben_skywalker dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 15/02/2007, 14h20
  2. [9i]erreur de type alors que le type est le meme...
    Par hoaxpunk dans le forum Oracle
    Réponses: 12
    Dernier message: 01/02/2006, 17h45
  3. [MySQL] Supprimer les erreurs de syntaxe dues aux quotes
    Par gotenks dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/01/2006, 16h10
  4. Réponses: 12
    Dernier message: 21/01/2006, 19h27

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