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 :

Problème de link avec glut et CMake


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 117
    Points : 61
    Points
    61
    Par défaut Problème de link avec glut et CMake
    Bonjour,

    J'ai un projet qui tourne sous Windows et on m'a demandé de le porter sous Linux tout simplement pour une raison de librairie annexe dont on a besoin et dont le seule licence disponible au labo est sous Linux. Je tiens à préciser que je n'ai jamais vraiment fait de "gros" projet sous Linux avant donc je me tourne vers vous vu que j'ai un problème que je n'arrive pas à résoudre.

    Sous WIndows le projet était composé de plusieurs sous projets. J'ai donc décider d'utiliser CMake pour faire la même chose. Disons pour le moment que j'ai un projet A et un projet B qui doit utiliser la librairie statique A. Jusque là pas de problème.

    Maintenant mon projet B utilise des fonctions Glut. Pour la compilation je n'ai pas de problème, mais le link ne passe pas.

    Voilà les erreurs que j'ai (j'ai coupé la fin car il y a enormément d'erreurs de link du même style) :
    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
    [ 75%] Building CXX object Bvh/CMakeFiles/Bvh.dir/Bvh.o
    In file included from /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/Bvh/Bvh.cpp:4:
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/Glut/include/GL/glut.h:19:1: warning: "APIENTRY" redefined
    In file included from /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/Glut/include/GL/glut.h:14,
                     from /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/Bvh/Bvh.cpp:4:
    /usr/include/GL/gl.h:104:1: warning: this is the location of the previous definition
    [100%] Building CXX object Bvh/CMakeFiles/Bvh.dir/Joint.o
    Linking CXX static library libBvh.a
    [100%] Built target Bvh
    [gossip]v1lhoyet: cd ..
    [gossip]v1lhoyet: make
    [ 40%] Built target Mathematics
    [ 80%] Built target Bvh
    Scanning dependencies of target Test
    [100%] Building CXX object Tests/CMakeFiles/Test.dir/test.o
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/Tests/test.cpp: In function â:
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/Tests/test.cpp:9: warning: converting to â from â
    Linking CXX executable Test
    /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libglut.a(libglut_la-freeglut_init.o): In function `glutInit':
    (.text+0x369): undefined reference to `glXQueryExtension'
    /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libglut.a(libglut_la-freeglut_main.o): In function `fghcbDisplayWindow':
    (.text+0x198): undefined reference to `glViewport'
    /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libglut.a(libglut_la-freeglut_main.o): In function `glutMainLoopEvent':
    (.text+0xa95): undefined reference to `glViewport'
    /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libglut.a(libglut_la-freeglut_menu.o): In function `fgDisplayMenu':
    Et au passage voici mon CMakeLists.txt pour le projet B
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # Make sure the compiler can find include files from our libraries. 
    include_directories (${MOTION_SOURCE_DIR}/Mathematics)
    include_directories (${MOTION_SOURCE_DIR}/Glut/include/GL)
     
    # Make sure the linker can find the libraries once it is built. 
    link_directories (${MOTION_BINARY_DIR}/Mathematics)
    link_directories (${MOTION_BINARY_DIR}/Glut/lib/glut/)
    link_directories (/usr/lib/X11/)
     
    # Create the "Bvh" library.
    add_library (Bvh Bvh.cpp Joint.cpp)
     
    # Link the executable to the libraries. 
    target_link_libraries (Bvh Mathematics libglut.a)
    Est-ce que quelqu'un peut m'aider ? J'ai cru comprendre que ça pourrait venir du fait qu'il faille linker avec la librairie X11, mais je n'arrive pas à m'en dépaitouiller ...

    Merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Points : 473
    Points
    473
    Par défaut
    Ton problème de link ne semble pas venir de glut mais plutôt de l'absence de la lib opengl.
    Si tu utilise CMake, il existe un module tout fait qui recherche les bibliothèques nécessaires à OpenGL. Ce module set un ensemble de variable directement utilisables, notamment le chemin vers les entêtes OGL et l'ensemble des libs requises.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # CMAKE
    INCLUDE(FindOpenGL)
     
    # Déclaration des chemins vers les entêtes OpenGL
    INCLUDE_DIRECTORIES(${OPENGL_INCLUDE_DIR})
     
    # On link notre projet avec les libs OpenGL
    TARGET_LINK_LIBRARIES( mon_projet ${OPENGL_LIBRARIES})
    NOTE: En cmake et en linux en général, on ne passe pas directement le nom physique de la lib (genre libglut.a comme dans ton exemple) mais uniquement le nom de la lib (glut). ld ou cmake fera la bonne traduction.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 117
    Points : 61
    Points
    61
    Par défaut
    Parfait ! Merci pour la réponse rapide, je ne connaissais pas ces méthodes de recherche d'opengl, ni qu'il fallait donner glut et non pas libglut.a
    Maintenant ça marche parfaitement (ou ça à l'air). J'ai encore quelques modules à passer sous Linux avec CMake avant de pouvoir vérifier si j'ai un affichage correct avec glut.
    En tout cas merci beaucoup !

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 117
    Points : 61
    Points
    61
    Par défaut
    Au passage question qui n'a que peu de rapport, mais si je peux éviter de créer un nouveau post rien que pour ça...
    Mon compilateur me donne des erreurs, mais les symboles ne sont pas définis, par exemple :

    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
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.h:42: error: default argument for parameter of type â has type â
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.h:42: error: default argument for parameter of type â has type â
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.h:46: error: default argument for parameter of type â has type â
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp: In member function â:
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp:31: error: â was not declared in this scope
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp:34: error: â was not declared in this scope
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp: In member function â:
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp:106: error: â was not declared in this scope
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp:106: error: â was not declared in this scope
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp:112: error: â was not declared in this scope
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp:115: error: â was not declared in this scope
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp:117: error: â was not declared in this scope
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp:117: error: â was not declared in this scope
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp:118: error: â was not declared in this scope
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp:130: error: â was not declared in this scope
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp:135: error: â was not declared in this scope
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp: In member function â:
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp:152: error: â does not name a type
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp:173: error: â was not declared in this scope
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp:173: error: â was not declared in this scope
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp:176: error: â was not declared in this scope
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp: In member function â:
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp:201: error: â was not declared in this scope
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp:201: error: â was not declared in this scope
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp:203: error: â was not declared in this scope
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp: In member function â:
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp:233: error: â was not declared in this scope
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp:233: error: â was not declared in this scope
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp:233: error: â was not declared in this scope
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp: In member function â:
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp:264: error: â was not declared in this scope
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp: In member function â:
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp:372: error: â was not declared in this scope
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp:372: error: expected `;' before â
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp:375: error: â was not declared in this scope
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp:375: error: â was not declared in this scope
    /afs/inf.ed.ac.uk/user/v/v1lhoyet/Motion/BvhSupport/RenderBvh.cpp: In member function â:
    C'est donc à moi de trouver pour chaque ligne ce que représente â ... c'est un petit peu pénible, est ce vous sauriez comment changer ça pour qu'il me donne le nom de la variable qui cause problème ou un truc dans le genre (j'ai l'impression qu'il n'y a pas les symboles de debeugage, est ce que ça viendrait d'un truc Debug/Release qu'il faudrait que je configure sous CMake ?)

    Merci d'avance

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Points : 473
    Points
    473
    Par défaut
    Intrumenter du code (i.e. ajouter des symbole de déboggage) n'est utile que si ton code compile. L'instrumentation sert uniquement à déboguer un code lors de son exécution.
    Or si ton code ne compile pas, tu risques d'avoir du mal à l'exécuter.
    Dans le cas d'erreurs en cascade comme tu présentes, avec un peu d'expérience, il est possible de localiser quelle erreur engendre toute les autres. C'est d'ailleurs un bon exercice d'essayer de la repérer, plutôt que de corriger une ligne puis recompiler et recommencer. Le gain de temps devient appréciable à la longue.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 117
    Points : 61
    Points
    61
    Par défaut
    En fait après correction ce ne sont pas des erreurs en cascades, mais souvent différentes erreurs du au passage de Windows vers Linux.
    Quand je parlais de symbole c'était par exemple avoir :
    impossible de convertir le paramètre 4 de 'int' en 'int *'
    à la place de :
    impossible de convertir â en â

    Où je ne sais généralement pas où est l'erreur sur la ligne (où est l'erreur de paramètre dans une fonction à 10 arguments par exemple ?)
    Sinon je suis tout à fait d'accord pour comprendre l'erreur plutôt que de compiler/recompiler jusqu'à ce que ça marche, mais je suis quand même pas mal habitué à VS qui donne pas mal de précisions sur les erreurs de compilation...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Points : 473
    Points
    473
    Par défaut
    Je n'ai malheureusement pas de réponse à ce problème. Je pense que c'est surtout l'habitude du compilo qui fera la différence. Contrairement à toi, j'utilise plus souvent gcc que Visual et je trouve les message de VC plus cryptiques. Uniquement parce que je suis plus habitué à l'un qu'à l'autre j'imagine.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 117
    Points : 61
    Points
    61
    Par défaut
    Ok merci quand même ^^

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

Discussions similaires

  1. [CMake]Problème de link avec un executable
    Par Anthares dans le forum Systèmes de compilation
    Réponses: 1
    Dernier message: 18/01/2012, 21h45
  2. Problème de link avec winsock2.h
    Par sebh dans le forum Windows
    Réponses: 5
    Dernier message: 25/04/2008, 11h01
  3. problème de link avec visual C++ 2005
    Par superC dans le forum OpenGL
    Réponses: 2
    Dernier message: 27/02/2007, 10h35
  4. [Code::Blocks] problème de link avec DevIL
    Par theidiot dans le forum DevIL
    Réponses: 4
    Dernier message: 01/10/2006, 18h26
  5. Problème de link avec Borland C++ 5.5
    Par gelam dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 24/11/2003, 16h45

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