Forum Programmation.c Problème avec -lGLU

Posté par  (site web personnel) .
Étiquettes : aucune
0
17
déc.
2005
Sur ma Mandriva, j'essaye de compiler le compo 4k 2004 (des démos tenant dans 4ko de code).

Bien évidemment, ça nécessite la librairie GLU.

Je l'installe (paquet libMesaGLU1-devel) et retente la compilation.

Invariablement j'ai :

#gcc -I /usr/include/SDL -I /usr/X11R6/include/GL/ -I ../../../include -lSDL -lGL -lGLU -lm -W -lpthread -O shadowsun.c -o shadowsun
shadowsun.c: In function 'main':
shadowsun.c:169: warning: incompatible implicit declaration of built-in function 'strlen'
/usr/bin/ld: cannot find -lGLU
collect2: ld returned 1 exit status

A chaque fois, depuis des années, j'ai toujours des problèmes avec cette lib dont les headers se trouvent /usr/X11R6/include/GL/

Quelqu'un a une idée ?
  • # re

    Posté par  (site web personnel) . Évalué à 3.

    Il te manque les fichiers :
    libGLU.la* libGLU.so* libGLU.so.1* libGLw.a

    dans /usr/X11R6/lib/

    En tout cas pour compiler du glu sur ma mandriva c'est comme ca. Sinon j'ai le meme erreur que toi.
    • [^] # Re: re

      Posté par  (site web personnel) . Évalué à 2.

      Ben non je les ais ! C'est vraiment bizarre

      #d /usr/X11R6/lib/libG*
      -rwxr-xr-x 1 root root 837 aoû 16 16:09 /usr/X11R6/lib/libGL.la*
      -rwxr-xr-x 1 root root 868 aoû 16 16:09 /usr/X11R6/lib/libGLU.la*
      lrwxrwxrwx 1 root root 17 déc 15 15:24 /usr/X11R6/lib/libGLU.so -> libGLU.so.1.3.502*
      lrwxrwxrwx 1 root root 17 nov 4 21:48 /usr/X11R6/lib/libGLU.so.1 -> libGLU.so.1.3.502*
      -rwxr-xr-x 1 root root 574024 aoû 16 16:09 /usr/X11R6/lib/libGLU.so.1.3.502*
      -rw-r--r-- 1 root root 27954 sep 12 23:52 /usr/X11R6/lib/libGLw.a
      lrwxrwxrwx 1 root root 13 nov 4 21:53 /usr/X11R6/lib/libGLw.so -> libGLw.so.1.0*
      lrwxrwxrwx 1 root root 13 nov 4 21:48 /usr/X11R6/lib/libGLw.so.1 -> libGLw.so.1.0*
      -rwxr-xr-x 1 root root 22332 sep 12 23:55 /usr/X11R6/lib/libGLw.so.1.0*

      Je ne sais pas trop comment marche ld, et comme c'est gcc qui l'appelle, je ne peux jouer avec...

      « Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker

      • [^] # Re: re

        Posté par  (site web personnel) . Évalué à 0.

        > Je ne sais pas trop comment marche ld

        A moi que je ne m'abuse (et c'est peut-être le cas), ld fonctionne de la manière suivante :

        1. on lui passe -lXXX
        2. il déduit que l'on cherche libXXX.so
        3. il le cherche dans les chemins mentionnés dans la variable LD_LIBRARY_PATH

        Mon conseil : regarde donc ta variable LD_LIBRARY_PATH pour voir si elle comprend bien les emplacements du GLU.

        Après, je ne sais plus trop si cette variable sert au link ou à l'exécution (il me semble que ce n'est qu'à l'exécution), mais bon...
        Si tu ne veux/peux pas la changer, je crois que le plus simple est de changer le Makefile en rajoutant aux options GCC un petit -L/usr/X11R6/lib. En fait, à y réfléchir, c'est vraiment le mieux à faire, que je sache.

        Voilà.
        J'espère que ça marchera (si tu n'as pas déjà résolu le problème, auquel cas ce serait bien de poster la réponse, histoire de me rafraichir la mémoire ;o)
        • [^] # Re: re

          Posté par  (site web personnel) . Évalué à 2.

          Je ne sais pas qui est l'imbécile qui t'as moinssé, mais en tout cas le -L a fonctionné. Merci !

          « Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker

          • [^] # Re: re

            Posté par  . Évalué à 2.

            Je ne sais pas qui est l'imbécile qui t'as moinssé

            Il n'est pas forcément nécessaire d'être moissé pour avoir un commentaire à 0. Si tu as posté trop de messages notés négativement récemment, tes messages sont automatiquement notés 0 ou -1 dès leur créations. Ça arrive quand on poste peu, et qu'on a le malheure de poster un truc qui ne plaît pas à deux imbéciles...

            Sinon pour rester dans le sujet, -L c'est pour indiquer les répertoires dans lesquel chercher les lib, et -l c'est pour se linker à une lib. Bref les lib indiqués par -l sont cherchées sous -L.
            • [^] # Re: re

              Posté par  (site web personnel) . Évalué à 2.

              Ah, effectivement, je pensais que le minimum était à 1.
              J'aurai peut être du lire le man ..? mais c'est tellement fastidieux....

              « Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker

          • [^] # Re: re

            Posté par  (site web personnel) . Évalué à 1.

            Heureux d'avoir pu aider, sinon pour synthétiser le méli-mélo d'infos que je donnais hier soir (ce n'était pas très clair) ainsi que le commentaire de Matafan :
            -lXXX requiert le fichier libXXX.so
            -L<chemin> indique où le trouver
            
            et le $LD_LIBRARY_PATH indique, si je ne me trompe, tous les chemins où se trouvent les bibliothèques requises à l'exécution. Voilà, cette fois je pense que je n'ai pas tout enmêlé ;o)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.