Forum Programmation.c Compilation gtk+-3.0

Posté par  .
Étiquettes :
0
14
mar.
2012

Mazette ! Je n'arrive pas à compiler après plusieurs jours, semaines, etc. Un programme avec automake, autoconf, etc. avec Gtk+-3.0 alors qu'avant tout fonctionnait sur des roulettes.

Mais que diable faut-il faire ?

Je me suis rabattu à compiler un bout de code miteux en gtk :

#include <stdlib.h>
#include <gtk/gtk.h>

int main(int argc, char **argv)
{
    /* Initialisation de GTK+ */
    gtk_init(&argc, &argv);

    return EXIT_SUCCESS;
}

que j'ai compilé avec :

gcc `pkg-config --cflags --libs gtk+-3.0` hello.c -o hello

sur un AMD64/Ubuntu 11.10, libgtk-3-dev, glib 2.30 sont pourtant bien installés..

Mais rien n'y fait :

/tmp/ccIwRsYi.o: In function `main':
hello.c:(.text+0x1e): undefined reference to `gtk_init'
collect2: ld a retourné 1 code d'état d'exécution

J'en perds mon latin*x !

Quelqu'un aurait une piste ?

Merci

  • # Déja c'est une erreur au linkage

    Posté par  . Évalué à 1.

    Donc moi je regarderais plutot l'option de link
    pourrais tu essayer en écrianvat la ligne comme ca ?
    gcc hello.c -o hello $(pkg-config --cflags gtk+-3.0) $(pkg-config --libs gtk+-3.0)

    • [^] # Re: Déja c'est une erreur au linkage

      Posté par  . Évalué à 2.

      J'ai lu certains messages qui évoquent une importance sur l'ordre des paramètres à gcc, et mettent l'appel à pkg-config à la fin de la ligne, comme l'a fait TheBreton :

      gcc hello.c -o hello `pkg-config --cflags --libs gtk+-3.0`
      
      

      Je serais curieux de savoir si ça résoud ton problème. Cela viendrait à priori d'un changement chez Ubuntu (prévu dans Natty mais réalisé dans Oneiric), qui se contourne en mettant les -libs à la fin : https://wiki.ubuntu.com/NattyNarwhal/ToolchainTransition

      Je n'ai pas compris les détails du document, donc si j'ai vu juste je suis preneur d'une explication.

      • [^] # Re: Déja c'est une erreur au linkage

        Posté par  . Évalué à 2.

        J'ai lu certains messages qui évoquent une importance sur l'ordre des paramètres à gcc

        Oui en effet, si A contient des références à des symboles de B, "cc -lB -lA" ne fonctionnera pas, mais "cc -lA -lB" oui

        Comme si gcc regardait ses arguments de droite à gauche et collectait les définitions, et vérifie à chaque référence qu'il puisse bien y associer une définition. (je suppose que c'est vraiment ce qu'il fait)

        Please do not feed the trolls

        • [^] # Re: Déja c'est une erreur au linkage

          Posté par  . Évalué à 3.

          attention quand même, l'ordre des libs dans les paramètres est important seulement pour les librairies statiques (.a), pas pour les librairies dynamiques.

    • [^] # Re: Déja c'est une erreur au linkage

      Posté par  . Évalué à 2.

      En effet, ça fonctionne.. Mais je suis dubitatif car je n'ai pas rencontré ce genre de soucis auparavant.

      Ce qui va m'amener à me pencher sur mon problème initial avec les Autotools.

      Bravo les mecs, vous êtes balèzes..

      Merci

  • # manque le .so

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

    hello.c:(.text+0x1e): undefined reference to `gtk_init'

    Il dit quoi exactement "pkg-config --libs gtk+-3.0" ?

    pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

    • [^] # Re: manque le .so

      Posté par  . Évalué à 1.

      Pour infos :
      -pthread -lgtk-3 -lgdk-3 -latk-1.0 -lcairo-gobject -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lglib-2.0

      • [^] # Re: manque le .so

        Posté par  . Évalué à 3.

        Questions suivantes:
        - Il ressemble à quoi le libgtk-3.so qui doit traîner dans /usr/lib ?
        - Que retourne la comamnde ldconfig ?

        • [^] # Re: manque le .so

          Posté par  . Évalué à 0.

          lrwxrwxrwx 1 root root 19 2012-02-06 11:31 libgtk-3.so -> libgtk-3.so.0.200.0
          -rw-r--r-- 1 root root 4,3M 2012-02-06 11:31 libgtk-3.so.0.200.0
          
          
          $ ldconfig libgtk*
          /sbin/ldconfig.real: chemin relatif `libgtk-3-0' utilisé pour construire le cache
          
          $ ldconfig -v | grep libgtk-3
          libgtk-3.so.0 -> libgtk-3.so.0.200.0
          
          

          Tu aurais une idée pour AUTOTOOLS ?

Suivre le flux des commentaires

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