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 :

Compilation et linkage issue


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 89
    Par défaut Compilation et linkage issue
    Bonjour,

    Je créé une librairie d'objets "MaLib" (avec Dev-C++). L'un de ces objets est une classe Window qui contient une méthode "reshape" dans laquelle j'appelle notamment glViewport(...), glLoadIdentity(...), glOrtho(...). La compilation de cette librairie est effectuée sans problème (les librairies glu, glut, opengl, etc. sont ajoutées comme option de compilation).
    Je crée ensuite un projet dans lequel j'utilise cette classe et la méthode reshape. A nouveau, j'ajoute les librairies glu, glut, opengl, etc. ainsi que ma librairie comme option de compilation. Et là, j'obtiens les message:
    Linker Error:
    undefined reference to `glViewport@16' in Window.cpp
    undefined reference to `glOrtho@48' in Window cpp
    >> première question: pourquoi dans ce cas aucune erreur n'apparait à la compilation de Window?

    Après avoir pas mal cherché (et pas trouvé), j'ai eu l'idée d'ajouter directement les fichier Window.h et Window.cpp à mon projet (sans rien changer aux options de compilation). Et là, miracle, plus d'erreurs !

    Je pense que l'erreur doit venir des options de compilations mais tout me semble correctement défini ... une idée ?

    En vous remerciant par avance,
    Christian

  2. #2
    Membre chevronné
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Par défaut
    Bonsoir,

    Je ne connais pas Dev-C++, mais il faut que tu ajoutes les librairies avec lesquelles tu veux te linker dans les paramètres de l'éditeur de liens.
    Le message d'erreur indique qu'il ne trouve pas les binaires de la définition des fonctions nommées. La compilation en elle-même se passe sans erreur car le compilateur trouve bien les déclarations des fonctions que tu utilises (qui se trouvent dans les fichiers .h que tu #includes). Le fait que la définition des fonctions soient introuvable n'est pas le problème du compilateur.

    Ton compilateur est bien configuré (il trouve bien les .h), mais ton éditeur de liens, non (il ne trouve pas les .dll/.a/.lib/.so).
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 89
    Par défaut L'ordre des libraries semble avoir une importance
    Florian,

    Merci pour la réponse détaillée. Après plusieurs essais, je suis arrivé à la conclusion que l'ordre dans lequel on indique les librairies semble avoir une importance. Lorsque je mets MaLib en haut du panier, ça fonctionne. Lorsqu'elle est en bas de la liste, ça ne fonctionne pas. Peut-être s'agit-il d'un problème de Dev-CPP.

    OK:
    g++.exe glutBezierClass.o -o "BezierClass.exe" -L"C:/Dev-Cpp/lib" ../Christian/lib/myTools.a ../lib/libopenglut.a ../lib/libglu32.a ../lib/libglut32.a ../lib/libopengl32.a -mwindows

    Pas OK:
    g++.exe glutBezierClass.o -o "BezierClass.exe" -L"C:/Dev-Cpp/lib" ../lib/libopenglut.a ../lib/libglu32.a ../lib/libglut32.a ../lib/libopengl32.a ../Christian/lib/myTools.a -mwindows

    [erreur: undefined reference to `glViewport@16']

    Cordialement,
    Christian

  4. #4
    Membre chevronné
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Par défaut
    En effet, l'ordre importe, ce n'est pas un problème inhérent à Dev-Cpp. Les libs bas-niveau doivent être chargées en dernier (je ne me souviens plus pourquoi, exactement).

    ?
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Parce que l'éditeur de liens de gcc cherche dans l'ordre et ignore les doublons. Celui de Visual ignore l'ordre, mais refusera de lier si deux bibliothèques exportent la même fonction.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. [XL-2007] Compilation de données issues de plusieurs fichiers xlsx
    Par Vitalic dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/11/2012, 22h35
  2. [XL-2003] compilation de données issues de trois tableaux
    Par plevec37 dans le forum Conception
    Réponses: 17
    Dernier message: 20/08/2012, 22h10
  3. [compilation] Makefile erreur (linkage?)
    Par Valkirion dans le forum C++
    Réponses: 7
    Dernier message: 03/08/2007, 21h24
  4. compilation linkage include et cie
    Par hpfx dans le forum C++
    Réponses: 7
    Dernier message: 13/07/2007, 12h35
  5. Réponses: 2
    Dernier message: 22/05/2006, 13h00

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