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

GTK+ avec C & C++ Discussion :

[GTK+ 3] Erreurs sur le tuto officiel


Sujet :

GTK+ avec C & C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2014
    Messages : 10
    Points : 7
    Points
    7
    Par défaut [GTK+ 3] Erreurs sur le tuto officiel
    Bonjour,
    ce topic est dédié aux erreurs/problèmes rencontrés sur la documentation officielle de GTK+ 3 (en) et est ouvert à toutes les personnes qui ont des problèmes avec cette doc.

    Sommaire partiel de la doc pour vous aider à voir si quelqu'un à déjà eu le même problème que vous. (Il sera compété si besoin)

    I. GTK+ Overview
    Getting Started with GTK+
    Basics
    Packing
    Drawing (problème résolu)
    Building user interfaces (problème résolu)

    PS : Ce topic est ouvert à tous mais avant de poster vérifiez que les solutions proposés pour les autres problèmes ne résolvent pas le votre. (ça évitera des doublons inutiles)

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2014
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Chapitre conceré du guide officiel :
    I. GTK+ Overview
    Getting Started with GTK+
    Drawing

    Comme vous pouvez vous en douter vu la ou je suis dans ce tuto, je suis un débutant avec GTK+ 3

    Lorsque je compile le code donné en exemple, codeblock me me ça dans l'onglet "Build messages" :


    Citation Envoyé par Code::Blocks
    ||=== Build: Debug in gtk_test (compiler: GNU GCC Compiler) ===|
    obj\Debug\main.o||In function `clear_surface':|
    D:\Tutos\C\gtk_test\main.c|11|undefined reference to `cairo_create'|
    D:\Tutos\C\gtk_test\main.c|13|undefined reference to `cairo_set_source_rgb'|
    D:\Tutos\C\gtk_test\main.c|14|undefined reference to `cairo_paint'|
    D:\Tutos\C\gtk_test\main.c|16|undefined reference to `cairo_destroy'|
    obj\Debug\main.o||In function `configure_event_cb':|
    D:\Tutos\C\gtk_test\main.c|26|undefined reference to `cairo_surface_destroy'|
    D:\Tutos\C\gtk_test\main.c|28|undefined reference to `gdk_window_create_similar_surface'|
    obj\Debug\main.o||In function `draw_cb':|
    D:\Tutos\C\gtk_test\main.c|49|undefined reference to `cairo_set_source_surface'|
    D:\Tutos\C\gtk_test\main.c|50|undefined reference to `cairo_paint'|
    obj\Debug\main.o||In function `draw_brush':|
    D:\Tutos\C\gtk_test\main.c|64|undefined reference to `cairo_create'|
    D:\Tutos\C\gtk_test\main.c|66|undefined reference to `cairo_rectangle'|
    D:\Tutos\C\gtk_test\main.c|67|undefined reference to `cairo_fill'|
    D:\Tutos\C\gtk_test\main.c|69|undefined reference to `cairo_destroy'|
    obj\Debug\main.o||In function `close_window':|
    D:\Tutos\C\gtk_test\main.c|127|undefined reference to `cairo_surface_destroy|
    ||=== Build failed: 13 error(s), 0 warning(s) (0 minute(s), 5 second(s)) ===|
    Avec mon niveau de débutant en C je comprend que les fonctions concernées ne sont déclarés, probablement car le fichier *.h concerné n'est pas inclus. Mais j'ai j'ai aussi lu que le fichier <gtk/gtk.h> s'occupe d'inclure tous les *.h nécessaires pour GTK+ 3. Donc je ne sais pas quoi faire ...

    PS : je suis sous Windows x64 familial premium et mon IDE est Code::Block.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 26
    Points : 28
    Points
    28
    Par défaut
    Bonsoir,

    Le .h ne suffit pas, car il faut aussi disposer des bibliothèques au moment du link (en français : édition des liens).

    En compilant avec MSYS, on inclut ces bibliothèques grâce à l'outil pkg-config :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc gtk3.c -o gtk3.exe `pkg-config --cflags --libs gtk+-3.0`
    ce qui ajoutera automatiquement les options manquantes, en l'occurence dans ton cas :

    -lcairo
    Cependant, tu utilises l'IDE Code:Blocks, que je ne connais pas personnellement. Il faut donc trouver un moyen de faire ceci dans l'interface de Code:Blocks ; il doit exister une section "bibliothèques", "dépendances", "options de compilation" où les mettre.

    PS : par curiosité, d'où tires-tu ta version de GTK+3 pour Windows ?

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2014
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Merci Tarnyko c'était bien ça

    Pour ceux qui onts le même problème que moi :
    (Dans Code::Block) Setting > Compiler... > Compiler Setting > Other options
    ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    `pkg-config --cflags gtk+-3.0`
    (Dans Code::Block) Setting > Compiler... > Linker Setting > Other options
    ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    `pkg-config --libs gtk+-3.0`
    PS :
    Citation Envoyé par Tarnyko Voir le message
    PS : par curiosité, d'où tires-tu ta version de GTK+3 pour Windows ?
    De cette page : http://www.gtk.org/download/win32.php

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2014
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Bonjour, voici le 2ème problème que j'ai rencontré :
    Chapitre concerné du guide officiel :
    I. GTK+ Overview
    Getting Started with GTK+
    Building user interfaces

    La compilation se passe bien (il n'y a ni erreur ni warning), mais lorsque je lance le programme une console s'ouvre et affiche les messages suivants :
    Citation Envoyé par console
    (gtk_test.exe:3348): GLib-GObject-WARNING **: invalid (NULL) pointer instance

    (gtk_test.exe:3348): GLib-GObject-CRITICAL **: g_signal_connect_data: assertion
    `G_TYPE_CHECK_INSTANCE (instance)' failed

    (gtk_test.exe:3348): GLib-GObject-WARNING **: invalid (NULL) pointer instance

    (gtk_test.exe:3348): GLib-GObject-CRITICAL **: g_signal_connect_data: assertion
    `G_TYPE_CHECK_INSTANCE (instance)' failed

    (gtk_test.exe:3348): GLib-GObject-WARNING **: invalid (NULL) pointer instance

    (gtk_test.exe:3348): GLib-GObject-CRITICAL **: g_signal_connect_data: assertion
    `G_TYPE_CHECK_INSTANCE (instance)' failed

    (gtk_test.exe:3348): GLib-GObject-WARNING **: invalid (NULL) pointer instance

    (gtk_test.exe:3348): GLib-GObject-CRITICAL **: g_signal_connect_data: assertion
    `G_TYPE_CHECK_INSTANCE (instance)' failed
    J'ai bien crée le fichier "builder.ui" et je l'ai mis dans le dossier courrant, dans le dossier du programme et J'ai essayé d'indiquer son chemin en relatif et en absolu : ça ne change rien. (Le fichier est encodé en Utf-8)

    Les erreurs surviennent lors de l'exécution des fonctions
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
    D'après le débogueur intégré à Code::Block, g_signal_connect() est transformé en g_signal_connect_data(), cette fonction appèle g_type_check_instance() de la dll "libgobject-2.0-0.dll" et c'est cette fonction qui appèle la fonction g_log()

    Je ne comprend pas pourquoi ça fait ça et je vous demande votre aide.

    Je suis toujours sous Windows x64 familial premium et mon IDE est Code::Block.
    Et j'utilise la version 32bits de gtk pour windows.

  6. #6
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    Montre-nous ton code exemple. Il est difficile de t'apporter un commentaire sans voir le code que tu tentes d'exécuter.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2014
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Bonjour à toi,
    Le code est à cette adresse : https://developer.gnome.org/gtk3/stable/ch01s04.html

  8. #8
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Dans l'exemple gtk_builder_add_from_file(); ne teste pas la valeur de retour. Vérifie chez toi si la valeur est >0. Dans le cas contraire tu peux initilialiser un pointeur GError* pour te permettre de comprendre d'où vient le problème.
    En substance ca donnerait :

    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
     GtkBuilder *builder;
      GObject *window;
      GObject *button;
      GError *error=NULL;
     
      gtk_init (&argc, &argv);
     
      /* Construct a GtkBuilder instance and load our UI description */
      builder = gtk_builder_new ();
      if (gtk_builder_add_from_file (builder, "builder.ui", &error)==0)
      {
         g_printerr ("%s\n", error->message);
         g_error_free (error);
         error = NULL;
      }
    À toi d'adapter ce code à ta convenance...

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2014
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Trouvé !
    Ton post m'as permis de trouver l'origine du problème : le fichier "builder.ui" était encodé en UTF-8 ... alors qu'il aurais du l'être en UTF-8 sans BOM ...

    En tout cas merci, je vais garder ton code de coté ... au cas où ...

    PS : Je met ce topic en RÉSOLU en attendant que quelqu'un ai à nouveau un problème avec les codes disponibles sur le guide officiel, et je le repasserais en non résolu si besoin.

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

Discussions similaires

  1. [PHP 4] Erreur sur le Tuto lecteur de flux RSS
    Par jubourbon dans le forum Langage
    Réponses: 11
    Dernier message: 06/07/2012, 09h07
  2. RIA : Erreur sur WebGetAttribute tuto WCF RIA Services
    Par Arnard dans le forum Silverlight
    Réponses: 5
    Dernier message: 19/08/2010, 14h29
  3. erreur sur using Gtk
    Par jason00 dans le forum Sharpdevelop
    Réponses: 14
    Dernier message: 26/11/2008, 15h33

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