Partage
  • Partager sur Facebook
  • Partager sur Twitter

Installer GTK+ sous Windows

Sujet résolu
    15 novembre 2015 à 0:38:39

    Bonjour à tous !


    Avant toutes choses, j'ai envie de remercier la communauté du Site du zéro/Openclassrooms. Ceci est le premier message que je poste sur le site alors que j'y suis allé à plusieurs reprises depuis plusieurs années, et plus fréquemment encore depuis que j'ai commencé mes études d'informatiques l'an passé. Donc merci à tous !


    Venons en maintenant à mon problème.

    J'ai un projet à réaliser en C pour mon semestre (exactement, je dois créer un jeu de yam's). J'aimerais donc créer une petite interface graphique. Pour cela, je cherche à installer GTK+ sur mon ordinateur qui tourne sous windows 8.1 en 64bits.

    Tout d'abord, j'ai trouvé ce guide : https://openclassrooms.com/courses/creez-une-interface-avec-gtk, cependant comme il est indiqué que le guide n'est pas maintenu à jour, surtout pour la version de GTK+, j'ai décidé d'installer la dernière version actuellement disponible.

    Donc, je suis allé sur le site de GTK+ (http://www.gtk.org/, onglet "Download", j'ai pris "Windows" (http://www.gtk.org/download/windows.php), et j'ai donc voulu installer msys2 64bits (si j'ai bien compris, en fait c'est un terminal qui va me permettre de compiler en c en utilisant GTK+, entre autre ?) et suivre le guide proposé (https://blogs.gnome.org/nacho/2014/08/01/how-to-build-your-gtk-application-on-windows/). Bon, ça ne fonctionne pas à partir du moment où je dois compiler le PKGBUILD, puisque ceci me sort un message d'erreur déclarant que le PKGBUILD n'existe pas, alors qu'il est dans le même dossier que le shell. Bref.

    J'ai continué mes recherches et je suis tombé sur ce guide : https://openclassrooms.com/forum/sujet/installation-de-gtk-sous-code-blocks-ou-autre "Parfait ! Un guide pour installer GTK+ et l'utiliser avec Code::blocks que j'utilise !" me dis-je, sauf que là aussi le guide semble un peu outdated. Le soucis, c'est que le site de GTK+ ne propose plus de télécharger les packages pour windows comme indiqués (comme vu au-dessus, ils proposent justement de suivre le guide avec msys2). Ainsi ai-je deux questions :
    1) Les packages proposés dans la section linux (http://www.gtk.org/download/linux.php) sont-ils utilisables ?
    2) Le script proposé pour remplacer celui de Code::blocks est-il toujours valable ?



    Si quelqu'un a une solution tout prête pour l'un ou l'autre de mes problèmes (avec msys2 ou code::blocks), je prends. Si quelqu'un compte se pencher sur un problème mais pas l'autre, j'avoue qu'utiliser code:blocks m'arrangerait fortement. Ou bien si quelqu'un a une solution alternative pour utiliser GTK+ sous Windows je suis preneur également.


    Cordialement,

    Cortez.

    -
    Edité par Steve.M 15 novembre 2015 à 0:40:52

    • Partager sur Facebook
    • Partager sur Twitter
      15 novembre 2015 à 11:02:47

      Bonjour,

      pour installer gtk, tu peux suivre ce lien: http://es.ece.fr/wp/wp-content/uploads/Tuto_GTK.pdf

      c'est gtk version 2.24.

      Compiler gtk sous window c'est l'horreur!

      • Partager sur Facebook
      • Partager sur Twitter
        15 novembre 2015 à 12:16:05

        Bonjour,

        Je me rappelle être tombé sur ce pdf au cours de mes recherches, mais je n'avais pas prolongé ma lecture justement à cause de la version qui semble relativement ancienne. Ça ne risque pas de créer des bugs et autres problèmes de compatibilités ?

        En tout cas, merci pour le lien, au moins je l'ai sous la main !

        -
        Edité par Steve.M 15 novembre 2015 à 12:53:00

        • Partager sur Facebook
        • Partager sur Twitter
          15 novembre 2015 à 14:47:20

          C'est vrai que ce n'est pas la dernière version, mais ça a l'avantage d'être simple à installer.

          Pour GTK 3, c'est plus compliqué. Tu peux télécharger une des versions 3.x ici:

          http://win32builder.gnome.org/

          Pour l'exemple, j'ai pris le premier. (gtk+-bundle_3.4.2-20130921_win32.zip)

          Je l'ai décompressé dans un dossier que j'ai appellé GTK+-3.4.2. J'ai donc l'arborescence suivante:

          C:\GTK-+3.4.2

              - bin

              - etc

              - include

              - lib

              - ......

          Pour configurer code blocks, on ne peut pas utiliser le template GTK, car il ne fonctionne que pour GTK 2. Donc pour configurer, je procède de la façon suivante:

          - créer un nouveau projet console application.

          - ensuite (comme d'habitude, je dis ça, car c'est toujours la même procèdure à suivre pour configurer une bibliothèque dans code blocks), aller dans Project -> Build options

          ensuite voilà quelques screenshots:

          search_dir_compiler

          linker

          les options dans le linker sont les suivantes:

          -lgtk-3 -lgdk-3 -lgdi32 -limm32 -lshell32 -lole32 -Wl,-luuid -lpangocairo-1.0 -lpangoft2-1.0 -lfreetype -lfontconfig -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lm -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl

          Une fois configurer, tu peux essayer le code ci-dessous, obtenu sur https://developer.gnome.org/gnome-devel-demos/unstable/hello-world.html.fr afin de voir, si ça compile.

          #include <gtk/gtk.h>
          
          static void activate (GtkApplication* app, gpointer user_data)
          {
            GtkWidget *window;
            GtkWidget *label;
          
            window = gtk_application_window_new (app);
            label = gtk_label_new ("Hello GNOME!");
            gtk_container_add (GTK_CONTAINER (window), label);
            gtk_window_set_title (GTK_WINDOW (window), "Welcome to GNOME");
            gtk_window_set_default_size (GTK_WINDOW (window), 200, 100);
            gtk_widget_show_all (window);
          }
          
          int main (int    argc, char **argv)
          {
            GtkApplication *app;
            int status;
          
            app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE); // <--- remplacer NULL par "***.*****.**" si NULL ne fonctionne pas
            g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
            status = g_application_run (G_APPLICATION (app), argc, argv);
            g_object_unref (app);
          
            return status;
          }
          

          Si ça compile, le plus dur sera fait!!

          Après, il ne restera plus qu'a copié les dll qui sont dans c:\GTK+-3.4.2\bin, dans le dossier où se situe le fichier executable, ceci dans le cas où tu executes le programme avec l'explorateur de fichier.

          Par contre, si tu executes, le programme dans code blocks, c'est à dire en appuyant sur la flèche verte, les dll devront être dans le dossier, où se site le fichier Ton_projet.cbp

          Il est aussi problable que tu dois copier d'autres fichiers dll qui se situe dans mingw32\bin. Car, j'ai du copier libgcc_s_dw2.dll et libwinpthread-1.dll

          Puis voici le résultat:

          exemple_GTK3

          -
          Edité par cauld 15 novembre 2015 à 15:18:27

          • Partager sur Facebook
          • Partager sur Twitter
            15 novembre 2015 à 17:54:27

            Bonjour,

            Merci énormément de t'être penché sur mon problème ! Cependant, j'ai peur qu'il ne soit pas résolu. Lors de la compilation, j'ai droit aux erreurs suivantes, comme si gtk/gtk.h n'était pas chargé correctement (d'ailleurs il est censé être où ce coquin ? Pas moyen de mettre la main dessus pour l'ouvrir. C'est pas ça le problème ?)

            Steve/StyFox/Cortez a écrit:

            ||=== Build: Debug in Test (compiler: GNU GCC Compiler) ===|

            obj\Debug\main.o||In function `activate':|
            C:\Users\User\Documents\Cours\L2\S3\Programmation\Test\main.c|8|undefined reference to `gtk_application_window_new'|
            C:\Users\User\Documents\Cours\L2\S3\Programmation\Test\main.c|9|undefined reference to `gtk_label_new'|
            C:\Users\User\Documents\Cours\L2\S3\Programmation\Test\main.c|10|undefined reference to `gtk_container_get_type'|
            C:\Users\User\Documents\Cours\L2\S3\Programmation\Test\main.c|10|undefined reference to `g_type_check_instance_cast'|
            C:\Users\User\Documents\Cours\L2\S3\Programmation\Test\main.c|10|undefined reference to `gtk_container_add'|
            C:\Users\User\Documents\Cours\L2\S3\Programmation\Test\main.c|11|undefined reference to `gtk_window_get_type'|
            C:\Users\User\Documents\Cours\L2\S3\Programmation\Test\main.c|11|undefined reference to `g_type_check_instance_cast'|
            C:\Users\User\Documents\Cours\L2\S3\Programmation\Test\main.c|11|undefined reference to `gtk_window_set_title'|
            C:\Users\User\Documents\Cours\L2\S3\Programmation\Test\main.c|12|undefined reference to `gtk_window_get_type'|
            C:\Users\User\Documents\Cours\L2\S3\Programmation\Test\main.c|12|undefined reference to `g_type_check_instance_cast'|
            C:\Users\User\Documents\Cours\L2\S3\Programmation\Test\main.c|12|undefined reference to `gtk_window_set_default_size'|
            C:\Users\User\Documents\Cours\L2\S3\Programmation\Test\main.c|13|undefined reference to `gtk_widget_show_all'|
            obj\Debug\main.o||In function `main':|
            C:\Users\User\Documents\Cours\L2\S3\Programmation\Test\main.c|21|undefined reference to `gtk_application_new'|
            C:\Users\User\Documents\Cours\L2\S3\Programmation\Test\main.c|22|undefined reference to `g_signal_connect_data'|
            C:\Users\User\Documents\Cours\L2\S3\Programmation\Test\main.c|23|undefined reference to `g_application_get_type'|
            C:\Users\User\Documents\Cours\L2\S3\Programmation\Test\main.c|23|undefined reference to `g_type_check_instance_cast'|
            C:\Users\User\Documents\Cours\L2\S3\Programmation\Test\main.c|23|undefined reference to `g_application_run'|
            C:\Users\User\Documents\Cours\L2\S3\Programmation\Test\main.c|24|undefined reference to `g_object_unref'|
            ||=== Build failed: 18 error(s), 0 warning(s) (0 minute(s), 3 second(s)) ===|




            Aussi, je ne trouve pas où est mingw32/bin (probablement mingw64 chez moi, car je le précise j'ai pris la 3.4.2 également pour tester dans un premier temps, mais en 64 bits)

            Si tu ne trouves pas rapidement, ne te casses pas la tête pour moi, je me contenterais de la précédente version.

            Merci encore !

            Cortez

            -
            Edité par Steve.M 15 novembre 2015 à 17:55:50

            • Partager sur Facebook
            • Partager sur Twitter
              15 novembre 2015 à 18:41:36

              oui, j'ai oublié de préciser, j'utilise mingw32 et win et en 64bits.

              J'ai essayé la bibliothèque gtk 3.4.2, en 64 bits et l'utilisation de mingw32. Comme c'était à prévoir, ça ne fonctionne pas. Mais j'obtiens les même erreur dans le build messages.

              J'ai poussé plus loin mes investigations, donc j'ai installé mingw64, et la ça fonctionne.

              Bref, il faudrait que tu détermines quel compilateur tu utilises (32 ou 64 bits). Si tu as installé code blocks avec mingw, mingw doit être dans le dossier de code blocks. Sinon, au pire tu fais une recherche avec l'explorateur de fichier.

              -
              Edité par cauld 15 novembre 2015 à 23:09:40

              • Partager sur Facebook
              • Partager sur Twitter
                15 novembre 2015 à 20:19:36

                Youpi ! Ca fonctionne !

                J'avais bien mingw32 d'installé de base avec Code::blocks (puisque le site de Code::blocks ne propose que ça pour windows), donc j'ai suivi un tuto pour installer mingw64 (ici si ça intéresse des gens : http://blog.security-helpzone.com/programmation/programmer-en-64x-avec-codeblocks.html), j'ai refais ce que tu m'avais dis plus haut, puis j'ai compilé. Là j'ai quand même eu un petit soucis.

                Dans 7 fichiers .h de gtk et 1de pango, il y a la ligne #include <cairo.h>. Sauf que cet idiot ne le trouvais pas. Du coup, j'ai bougé le dossier de cairo à côté des dossiers de gdk et gtk, et j'ai modifié la ligne en #include <cairo/cairo.h> pour chaque fichier. Du coup, maintenant ça fonctionne et j'ai ma petite fenêtre qui pop, j'ai même testé avec un autre programme du cours et ça fonctionne.  J'espère juste que ça posera pas de soucis par la suite, au pire j'aurais juste à bouger des dossiers et changer les #include d'autres fichiers, du moment que y'en a pas trop... hug.


                Merci bien pour ton aide, j'espère que ce sera utile à d'autres aussi !

                • Partager sur Facebook
                • Partager sur Twitter
                  15 novembre 2015 à 20:47:19

                  Tu peux aussi, au lieu déplacer les fichiers headers, modifier les dossiers dans Search directories -> Compiler, je pense.

                  J'ai fait ainsi, j'avais d'abord, inclus, C:\GTK+-3.4.2\include\gtk-3.0, puis compiler. J'ai obtenu un erreur à une ligne dans un autre fichier header du type #include <../glib.h> (un truc de ce style). J'ai inclus en plus, C:\GTK+-3.4.2\include\glib-2.0

                  J'ai procédé ainsi récursivement, jusqu'à ce que ça compile. Et j'ai obtenu la configuration qu'on peut voir sur la première image.(Search directories -> Compiler)

                  -
                  Edité par cauld 15 novembre 2015 à 20:48:11

                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 novembre 2015 à 22:29:40

                    En effet, j'ai tout remis comme avant (à savoir les #include et la position du cairo dans le GTK+-3.4.2\include) et j'ai simplement inclus D:\GTK+-3.4.2\include\cairo et ça marche impec'. Encore une fois, merci !


                    Sur ce, je me permet de passer le sujet en résolu. A moi, widgets et programmation évènementielle !

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Installer GTK+ sous Windows

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown