Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 10/08/2008, à 15:27

BULL II N'R

Faire apparaître une fenêtre avec le langage C [RESOLU]

Bonjour à tous,

je suis tout nouveau en programmation, surtout en C.

j'ai un livre qui a l'air pas mal du tout : "GNOME/GTK+ Le guide du développeur".
le problème est qu'il date de 2000 et les choses ont changé dans gnome.

Voilà mon problème. Daprès le livre, il faut :
Créer, par exemple, le fichier gtkwin.c :

/** gtkwin **/
#include <gtk/gtk.h>

int main(int argc,char *argv[])
{
GtkWidget *topLevelWindow;

gtk_init(&argc,&argv);
topLevelWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_show(topLevelWindow);
gtk_main();
exit(0);
}

Puis lancer la commande :

gcc gtkwin.c -o gtkwin

Après avoir galéré de longues heures cette nuit à trouver le problème, voilà ce qu'il faut ajouter à la commande maintenant en 2008 pour que ça marche :

gcc gtkwin.c -o gtkwin $(pkg-config gtk+-2.0 --cflags) $(pkg-config gtk+-2.0 --libs)

Donc la solution est à moitié trouvée, car cette ligne de commande est un peu lourde et surtout je n'arrive pas à l'intégrer à mon makefile :

gtkwin: gtkwin.c

Avez-vous une idée ? C'est la base, je sais, mais c'est le prix à payer pour lire un bon livre de l'an 2000   big_smile

Dernière modification par BULL II N'R (Le 11/08/2008, à 22:26)


BULL II N'R
HP DV6610 + Ecran HP w2408h => Ubuntu 12.04 with Gnome Shell
HP mini 110 => Ubuntu 11.10 with Gnome Shell

Hors ligne

#2 Le 10/08/2008, à 15:42

robrob

Re : Faire apparaître une fenêtre avec le langage C [RESOLU]

Pour ton makefile:

CC = gcc
CFLAGS = `pkg-config gtk+-2.0 --cflags` -Wall -W
LFLAGS = `pkg-config gtk+-2.0 --libs`

gtkwin: gtkwin.o
[tab]$(CC) -o $@ $^ $(LFLAGS)

%.o: %.c
[tab]$(CC) -o $@ -c $< $(CFLAGS)

(vite fait, remplacer les [tab] par des tabulations)

PS: $@ renvoie la règle
$< renvoie la première dépendance
$^ renvoie toutes les dépendances
%.o: %.c est ce que l'on appelle une règle générique. C'est basique (au niveau de la gestion des dépendances), mais ça fait simplement le boulot.

PPS: j'ai rajouté les flags Wall et W qui mentionnent les petites erreurs courantes de codages à la compilation. Si l'on veut, on peut demander à gcc d'être beaucoup plus strict sur les erreurs avec d'autres flags.

PPPS: correction du makefile et des explications

Dernière modification par robrob (Le 10/08/2008, à 22:17)

Hors ligne

#3 Le 10/08/2008, à 18:14

BULL II N'R

Re : Faire apparaître une fenêtre avec le langage C [RESOLU]

merci de ta réponse. Mais dans l'état, ça ne marche pas. Je débute, donc je ne comprends que par les exemples.

J'ai beau essayer de changer des choses, ça ne marche pas, alors voilà des pistes qui pourront t'aider :

Quand je lance make avec ton make file, voilà ce que j'obtiens :

gcc -o gtkwin.o -c gtkwin.c  -Wall -W
gtkwin.c:2:21: erreur: gtk/gtk.h : Aucun fichier ou dossier de ce type
gtkwin.c: Dans la fonction «main» :
gtkwin.c:6: erreur: «GtkWidget» undeclared (first use in this function)
gtkwin.c:6: erreur: (Each undeclared identifier is reported only once
gtkwin.c:6: erreur: for each function it appears in.)
gtkwin.c:6: erreur: «topLevelWindow» undeclared (first use in this function)
gtkwin.c:8: attention : déclaration implicite de la fonction « «gtk_init» »
gtkwin.c:9: attention : déclaration implicite de la fonction « «gtk_window_new» »
gtkwin.c:9: erreur: «GTK_WINDOW_TOPLEVEL» undeclared (first use in this function)
gtkwin.c:10: attention : déclaration implicite de la fonction « «gtk_widget_show» »
gtkwin.c:11: attention : déclaration implicite de la fonction « «gtk_main» »
gtkwin.c:12: attention : déclaration implicite de la fonction « «exit» »
gtkwin.c:12: attention : incompatible implicit declaration of built-in function «exit»
make: *** [gtkwin.o] Erreur 1

J'ai des questions :
1) Pourquoi passer par un fichier en .o (en tout cas dans mon exemple) ?

2) je crois que tu t'es trompé dans la légende :
PS: $@ renvoie la destination
$< renvoie la première dépendance
$@ renvoie toutes les dépendances

L'un des deux doit être $^

Il faut que je remplace quelque chose ? Que faire dans mon exemple à moi ?


3) Dans mon gtkwin.c, il y a :
#include <gtk/gtk.h>

Est-ce qu'il faut que je le remplace par :
#include <gtk-2.0/gtk/gtk.h>

Mais ça a l'air de poser aussi des problèmes.


Je te remercie d'avance. A force de tourner le truc dans tous sens, j'en ai la nauzé. Fait chi** d'avoir un livre non à jour  roll


BULL II N'R
HP DV6610 + Ecran HP w2408h => Ubuntu 12.04 with Gnome Shell
HP mini 110 => Ubuntu 11.10 with Gnome Shell

Hors ligne

#4 Le 10/08/2008, à 18:22

robrob

Re : Faire apparaître une fenêtre avec le langage C [RESOLU]

me suis trompé en effet essaye:

CFLAGS = `pkg-config gtk+-2.0 --cflags` -Wall -W
LFLAGS = `pkg-config gtk+-2.0 --libs`

note: le ` c'est alt gr+7, pas celui du 4

Hors ligne

#5 Le 10/08/2008, à 19:06

BULL II N'R

Re : Faire apparaître une fenêtre avec le langage C [RESOLU]

merci !!!! je vais enfin pouvoir avancer.

perso j'ai une préférence pour le   $(truc)    que    `truc`     => plus visible et facile au niveau des clics. Mais ça n'engage que moi.


Juste pour info, pourrais tu me donner la légende corrigée :

$@ renvoie la destination
$< renvoie la première dépendance
$@ renvoie toutes les dépendances
%.o: %.c est ce que l'on appelle une règle générique. C'est basique (au niveau de la gestion des dépendances), mais ça fait simplement le boulot.


Lequel est vraiment le $@   et lequel est   $^   ?

En tout cas merci robrob !!!


BULL II N'R
HP DV6610 + Ecran HP w2408h => Ubuntu 12.04 with Gnome Shell
HP mini 110 => Ubuntu 11.10 with Gnome Shell

Hors ligne

#6 Le 10/08/2008, à 22:12

robrob

Re : Faire apparaître une fenêtre avec le langage C [RESOLU]

C'est $^ qui retourne toutes les dépendances:

Si tu as règle définie comme ceci

regle : dependance1 dependance2 dependance3

$@ -> regle
$< -> dependance1
$^ -> dependance1 dependance2 dependance3

ps: j'ai corrigé mon post du dessus

Dernière modification par robrob (Le 10/08/2008, à 22:15)

Hors ligne

#7 Le 11/08/2008, à 17:39

BULL II N'R

Re : Faire apparaître une fenêtre avec le langage C [RESOLU]

Merci !;)


BULL II N'R
HP DV6610 + Ecran HP w2408h => Ubuntu 12.04 with Gnome Shell
HP mini 110 => Ubuntu 11.10 with Gnome Shell

Hors ligne