Programmation GTK Linux , problème de #include

Programmation GTK Linux , problème de #include - C++ - Programmation

Marsh Posté le 26-03-2003 à 14:52:36    

bonjour,
 
lorsque je fais
$ gcc main.c -o main 'pkg-config --cflags --libs gtk+-2.0'
 
j'obtiens une erreur comme quoi le fichier est introuvable
 
dans le dossier /usr/include j'ai pourtant
gtk-1.2/gtk/gtk.h
gtk-2.0/gtk/gtk.h
 
en remplaçant la ligne de commande ainsi :
$ gcc main.c -o main 'pkg-config --cflags --libs gtk-2.0'
 
ça ne fonctionne pas non plus, gcc ne trouve pas gtk/gtk.h que je met en #include<gtk/gtk.h>
 
si je met #include<gtk-2.0/gtk/gtk.h> ça marche mais alors gcc ne trouve pas tous les .h utilisés pas gtk.
 
Comment puis-je résoudre ce problème ??
 
Merci !
 
PS : j'ai hésité à mettre ce sijet dans OS Alternatifs  :??:

Reply

Marsh Posté le 26-03-2003 à 14:52:36   

Reply

Marsh Posté le 26-03-2003 à 15:44:29    

Perso je n'ai jamais utilisé pkg-config, mais toujours le *-config spécifique à la librairie, soit dans ce cas le gtk-config.
 
Est ce que ça marche en faisant
$ gcc main.c -o main 'gtk-config --cflags --libs'
 
Si oui, il est possible que le pkg-config soit mal configuré : je pense que `gtk-config --cflags --libs` et 'pkg-config --cflags --libs gtk+-2.0' devraient renvoyer le même résultat, faudrait vérifier.
 
Au pire tu peux toujours forcer le répertoire d'include avec l'option -I/usr/include/gtk-2.0, mais ce n'est pas très joli, et l'intérêt des *-config est justement d'éviter les lignes de compile à rallonge. En plus tu risques d'avoir d'autres problèmes au moment du lien.

Reply

Marsh Posté le 31-03-2003 à 00:04:26    

je vais regarder ça...
merci !

Reply

Marsh Posté le 02-04-2003 à 12:22:48    

Bon j'ai fais le test, et cela ne fonctionne pas non plus :
 
$ gcc main.c -o main 'gtk-config --cflags --libs'
gcc: gtk-config --cflags --libs: Aucun fichier ou r?pertoire de ce type
main.c:1:20: gtk/gtk.h: Aucun fichier ou répertoire de ce type
 
je comprends pas tout... :(
 
des idées ??

Reply

Marsh Posté le 02-04-2003 à 15:09:46    

Heu...
Question bête : tu es sûr d'avoir correctement intallé la gtk-devel ? Si tu tapes gtk-config --version sur une ligne de commande, il te dis quoi ?
 
Normalement, gtk-config te renvoie les options de compilation qui vont bien, soit
$ gtk-config --cflags --libs
-I/usr/include/gtk-1.2 -I/usr/include/glib-1.2 -I/usr/lib/glib/include -I/usr/X11R6/include
-L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm
 
Si gtk-config n'est pas intallé, tu peux toujours mettre ces options à la main : tu reprends les lignes au dessus en mettant les bons répertoires.

Reply

Marsh Posté le 17-08-2004 à 21:30:17    

je me permes de upper un peu ce topik car j'ai le même problème !
 
gtk-config --version  
--> ça me donne la version de gtk (enfin si je me rappelle bien).
 
$ gtk-config --cflags --libs
---> ça me donne un peu près ça :
-I/usr/include/gtk-1.2 -I/usr/include/glib-1.2 -I/usr/lib/glib/include -I/usr/X11R6/include  
-L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm  
 
N.B : il m'indique comme message d'erreur :
main.cpp:1:21: gtk/gtk.h: Aucun fichier ou répertoire de ce type (en anglais par contre lol).
 
j'utilise mdk 9.2 (avant windows mais trop compliqué pour la compil lol)

Reply

Marsh Posté le 17-08-2004 à 22:56:01    

$(gtk-config --cflags --libs) :o (ou avec backquotes `) (ou avec pkg-config plus génériquement)
 
t'as pas le fichier ? ben installe les paquets de développement :o

Reply

Marsh Posté le 17-08-2004 à 22:56:37    

Tu as bien utilisé des ` et non pas des ' pour la ligne de commande de gcc ?

Reply

Marsh Posté le 18-08-2004 à 12:09:44    

bah disons franchement le problème c que c le bordel pour compiler. honnétement on nous apprend pas à compiler quoi que ce soit sous linux en iut et résultat en sortant de là bah on sait même pas créer un programme en dehors de windows (et encore)...
franchement tout ce qui est dit ici je l'ai jamais vu ce qui est quand même un comble !
est ce que vous pourriez détailler un peu plus ?

Reply

Marsh Posté le 19-08-2004 à 09:54:18    

ou à la limite juste une adresse ou un cours pour savoir comment compiler avec gcc et gtk

Reply

Marsh Posté le 19-08-2004 à 09:54:18   

Reply

Marsh Posté le 20-08-2004 à 19:05:30    

voila une réponse plus clair à mon prb :
 
Voilà j'ai un gros problème de compilation gtk sous linux.
 
[kerdreux@localhost visualisation]$ pkg-config --modversion gtk+
2.2.4
 
[kerdreux@localhost visualisation]$ pkg-config --cflags --libs gtk+
-I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/pango-1.0 -I/usr/X11R6/include -I/usr/include/freetype2 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include  -Wl,--export-dynamic -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangoxft-1.0 -lpangox-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0
 
ors quand je lance mon main.cpp avec la commande suivante :
[kerdreux@localhost visualisation]$ gcc -Wall -g main.cpp -o main 'gtk-config --cflags –libs'
 
j'obtiens le résultat suivant :
gcc: gtk-config --cflags --libs: No such file or directory
main.cpp:10:21: gtk/gtk.h: No such file or directory
main.cpp:19: error: `GtkWidget' was not declared in this scope
...
 
en modifiant la compile avec :
[kerdreux@localhost visualisation]$ cat compile
gcc -Wall -g main.cpp -o main -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/pango-1.0 -I/usr/X11R6/include -I/usr/include/freetype2 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include  -Wl,--export-dynamic -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangoxft-1.0 -lpangox-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0
[kerdreux@localhost visualisation]$
 
j'obtiens :  
[kerdreux@localhost visualisation]$ compile
/home/kerdreux/tmp/ccaigFbW.o(.eh_frame+0x11): In function `main':
/mnt/win_d2/visualisation/main.cpp:35: undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
[kerdreux@localhost visualisation]$
 
par contre en modifiant tous les appels aux fonctions gtk (je les mes en commentaire) il me compile correctement le programme.
 
 
Voici le code source :
 

Code :
  1. /********************
  2. *  Implementation
  3. ********************/
  4. /**********
  5. LIBRAIRIE
  6. **********/
  7. #include <stdlib.h>
  8. #include <gtk/gtk.h>
  9. #include "texte.h" // fichier contenant les expressions
  10. /**********************
  11. EN TETE DES FONCTIONS
  12. **********************/
  13. // procedure de destruction d'une fenetre
  14. void OnDestroy(GtkWidget *Fenetre, gpointer Data);
  15. // procedure d'initialisation d'une fenetre
  16. void InitWindows(GtkWidget *Fenetre);
  17. /************************
  18. PROGAMMA PRINCIPALE
  19. ************************/
  20. int main(int argc, char **argv)
  21. {
  22.     // creation du widget
  23.     GtkWidget *Console;
  24.     // init du GTK
  25.     gtk_init(&argc, &argv);
  26.     // init du widget
  27.     Console = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  28.     // connecxion du signal destroy
  29.     //g_signal_connect(G_OBJECT(Consol, "destroy", G_CALLBACK(OnDestroy),NULL);
  30.     // affichage de la fenetre
  31.     gtk_widget_show(Console);
  32.     // boucle evenementielle
  33.     gtk_main();
  34.     // fin du prg
  35.     return EXIT_SUCCESS;
  36. }
  37. /********************
  38. CORPS DES FONCTIONS
  39. ********************/
  40. // procedure de destruction d'une fenetre
  41. void OnDestroy(GtkWidget *Fenetre, gpointer Data)
  42. {
  43.   // arrêt de la boucle evenementielle
  44.   gtk_main_quit();
  45. }
  46. // procedure d'initialisation d'une fenetre
  47. void InitWindows(GtkWidget *Fenetre)
  48. {
  49.   // position de la fenetre passé en paramètre : aléatoire
  50.   gtk_window_set_position(GTK_WINDOW(Fenetre),GTK_WIN_POS_NONE) ;
  51.   // Titre de la fenetre à partir du fichier
  52.   gtk_window_set_title(GTK_WINDOW(Fenetre),NameWindows);
  53.   // taille de la fenetre
  54.   gtk_window_set_default_size(GTK_WINDOW(Fenetre),LargeurWindow,HauteurWindow);
  55. }

Reply

Marsh Posté le 20-08-2004 à 20:39:06    

On a dis d'utiliser des ` à la place des ' dans la ligne de commande de gcc :o

Reply

Marsh Posté le 20-08-2004 à 20:46:10    

Kristoph a écrit :

On a dis d'utiliser des ` à la place des ' dans la ligne de commande de gcc :o


 
ouais...
 
ça fait bcp de posts pour rien en plus


Message édité par farib le 20-08-2004 à 20:46:45

---------------
Bitcoin, Magical Thinking, and Political Ideology
Reply

Marsh Posté le 20-08-2004 à 20:54:56    

"connecxion"
 
t'as oublié un t :o

Reply

Marsh Posté le 20-08-2004 à 22:55:28    

farib a écrit :

ouais...
 
ça fait bcp de posts pour rien en plus


 
---> bah désolé j'avais vu mais je comprenais pas trop la différence parce que perso j'avais jamais utilisé le ` et franchement je voyais même pas ou il était  :lol: (en plus j'ai fais un copier coller d'un site !)
 
en même temps j'ai mis les chemins directement dans la commande gcc donc ça aurait du marché aussi non ?
 


Message édité par lordankou le 21-08-2004 à 10:01:07

---------------

Reply

Marsh Posté le 21-08-2004 à 10:01:13    

--> bon j'ai modifié en remplaçant ' par ` et certe il m'envoie plus l'erreur :  
gcc: gtk-config --cflags --libs: No such file or directory
 
mais l'erreur (la même erreur que lorsque j'inclue à la mano les chemins d'accès dans la ligne de compilation) :  
[kerdreux@localhost visualisation]$ compile  
/home/kerdreux/tmp/ccaigFbW.o(.eh_frame+0x11): In function `main':  
/mnt/win_d2/visualisation/main.cpp:35: undefined reference to `__gxx_personality_v0'  
collect2: ld returned 1 exit status
 
(et par conséquent ce n'est donc pas un post de plus pour rien...).
donc si quelqu'un pouvait m'aider car il m'envoie une erreur comme ça sur chaque fonction gtk (du moins sur la première rencontrée à chaque fois).


---------------

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed