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

Langage C++ Discussion :

"undefined reference to" fonction sous code::blocks


Sujet :

Langage C++

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 5
    Points : 3
    Points
    3
    Par défaut "undefined reference to" fonction sous code::blocks
    Bonjour,

    En suivant ce tutoriel qui explique contrôler un joystick en C, j'ai essayé de détecter le mien. Je précise que le projet sous Code::Blocks est en C++ (je l'ai très légèrement modifié pour cela, mais le code brut en C ne fonctionnait pas non plus) et que je tourne sous Windows 7 (version 64bits).

    Le code est donc le suivant :
    Code C++ : 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
     
    #include <iostream>
    #include <windows.h>
     
    using namespace std;
     
    int main()
    {
        int i;
        JOYINFO structtmp;
     
        cout << "Voici la liste des joysticks connectés :" << endl;
        for (i = JOYSTICKID1 ; i < (JOYSTICKID1 + 16) ; i++) //seuls 16 IDs sont possibles
        {
            if (joyGetPos(i,&structtmp) == JOYERR_NOERROR)
                cout << i << endl;
        }
    }

    Je reçois l'erreur suivante lorsque je tente de compiler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    obj\Release\main.o:main.cpp:(.text.startup+0x4a)||undefined reference to `joyGetPos@8'|
    J'ai fais des recherches, et ai simplifié le programme au maximum, mais pas moyen de résoudre le problème. Avez vous une idée de la source du problème?

  2. #2
    Membre éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    Par défaut
    Bonjour,

    Tu dois "linker" ton programme avec la bibliothèque contenant "joyGetPos".

    En cherchant "joyGetPos" sur google, on voit que cette fonction appartient à la bibliothèque Winmm.

    Avec un peu de chance(*), tu peux ajouter l'option suivante au linker : -lwinmm dans "build options"/"link libraries"

    (*) Il faut pour cela que MinGW ait généré libwinmm.a pour la DLL Winmm.dll. Tu devrais trouver ça dans MinGW/lib/libwinmm.a

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Le fichier libwinmm.a est bien généré (tout du moins il est bien présent dans C:\Program Files (x86)\CodeBlocks\MinGW\lib), mais lorsque j'ajoute l'option "-lwinmm" au linker, je reçois l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ld.exe||cannot find -l-lwinmm|
    J'ai essayé également l'option "libwinmm.a", mais j'ai obtenu le même code d'erreur. Je ne sais pas vraiment comment gérer les bibliothèques externes, je n'en ai jamais utilisé jusque là... J'ai téléchargé le fichier DLL, et l'ai copié un peu partout dans le dossier de mon projet mais en vain.

    Dois-je ajouter un fichier .lib? Si oui, comment dois-je le faire?

    Merci.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 116
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Vue l'erreur, tu aurais pas ajouté "-lwinmm" alors qu'il ne faut mettre que winmm ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    En effet... Tout fonctionne parfaitement maintenant.

    Merci.

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

Discussions similaires

  1. undefined reference to 'fonction()' avec code block
    Par Marmoccelle dans le forum Code::Blocks
    Réponses: 8
    Dernier message: 01/02/2019, 16h15
  2. Fonction undefined reference avec SDL 2 et Code::Blocks
    Par therev123 dans le forum OpenGL
    Réponses: 7
    Dernier message: 07/08/2013, 18h54
  3. Réponses: 9
    Dernier message: 19/12/2012, 17h59
  4. Réponses: 1
    Dernier message: 18/11/2012, 00h47
  5. Undefined reference avec les fonctions d'une class
    Par romnair dans le forum Débuter
    Réponses: 5
    Dernier message: 10/04/2012, 16h40

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