Erreur de compilation d'un programme en "C&qu
Fermé
Abdel Majid
-
2 oct. 2003 à 23:01
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022 - 3 oct. 2003 à 20:08
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022 - 3 oct. 2003 à 20:08
A voir également:
- Erreur de compilation d'un programme en "C&qu
- Erreur 0x80070643 - Guide
- Programme demarrage windows 10 - Guide
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Guide
- Desinstaller un programme - Guide
1 réponse
asevere
Messages postés
13084
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
3 février 2022
426
3 oct. 2003 à 03:33
3 oct. 2003 à 03:33
Salut,
Peux-tu, d'une part verifier la présence sur ton system de Xlib.h
je pense dans "/usr/X11R6/include/X11/Xlib.h"
D'autre part, copier coller le code C que tu essayes de comiler ?
Merci:)
@+
Peux-tu, d'une part verifier la présence sur ton system de Xlib.h
je pense dans "/usr/X11R6/include/X11/Xlib.h"
[shell]# find /usr | grep X[Ll]ib.h
D'autre part, copier coller le code C que tu essayes de comiler ?
Merci:)
@+
"Si c'est stupide et que ça marche, alors ce n'est pas stupide"
3 oct. 2003 à 19:21
/*
* xsimple : Affiche une chaine dans une fenetre X...
*/
#include <stdio.h>
#include <X11/Xlib.h>
En premier lieu, on inclut le fichier stdio.h (ça peut toujours servir) et surtout le fichier X11/Xlib.h qui contient les définitions des types et constantes utilisées par la Xlib.
GC gc;
Display *display;
int screen;
Window win, root;
unsigned long white_pixel, black_pixel;
On déclare les variables globales utilisées par le programme (contexte graphique, display, screen, fenêtres et "couleurs" noir et blanc).
/*
* fonction associee a l'evenement EXPOSE
*/
void expose ()
{
XDrawString (display, win, gc, 10, 30, "Hello, world !", 14);
}
Cette fonction est appelée lorsque la fenêtre win reçoit l´évènement Expose. Ceci arrive dans deux cas seulement :
lorsque la fenêtre est affichée à l´écran par un XMapWindow
lorsqu´une portion de la fenêtre précedemment couverte par une autre redevient visible (et que le serveur X ne fait pas de gestion interne des recouvrement - ou backing-store)
ATTENTION: on ne peut pas écrire dans une fenêtre AVANT qu´elle n´ait reçu son premier évènement Expose.
Lors de la réception de l´évènement Expose, on affiche la chaine "Hello, world" aux coordonnées (10, 30) de la fenêtre win.
/*
* programme principal
*/
main(ac, av)
int ac;
char **av;
{
char *dpyn = NULL;
/* selection du display en ligne */
if (ac == 3) {
if (strcmp (&av[1][1], "display") == 0) {
dpyn = av[2];
}
else {
fprintf (stderr, "Usage: xsimple [-display display_name]\n");
exit (1);
}
}
if ((display = XOpenDisplay (dpyn)) == NULL) {
fprintf (stderr, "Can't open Display\n");
exit (1);
}
Dans le programme principal, on ouvre tout d´abord une connexion avec un serveur X (donné par le contenu de la variable d´environnement DISPLAY). On peut également passer la valeur du display en paramètre sur la ligne de commande (par convention, c´est l´option -display). Il suffit ensuite d´appeler la fonction XOpenDisplay qui renvoit un pointeur de Display si il existe.
gc = DefaultGC (display, screen);
screen = DefaultScreen (display);
root = RootWindow (display, screen);
white_pixel = WhitePixel (display, screen);
black_pixel = BlackPixel (display, screen);
On récupère les valeurs par défaut des différentes variables (contexte graphique, screen, ...). Pour celà, on utilise des macros-instructions définies dans X11/Xlib.h .
win = XCreateSimpleWindow (display, root, 0, 0, 100, 90, 2, black_pixel, white_pixel);
XSelectInput (display, win, ExposureMask);
XStoreName (display, win, "xsimple");
XMapWindow (display, win);
On crée ensuite la fenêtre win par la fonction XCreateSimpleWindow. Cette fenêtre a pour parent la root-window, ses dimensions sont 100 sur 90 pixels, 2 pixels d´épaisseur pour le bord, fond blanc, bord noir.
L´appel à XSelectInput indique que la fenêtre ne s´intéresse qu´à l´évènement Expose (ExposureMask).
La fonction XStoreName permet de nommer la fenêtre pour le window-manager (dans notre cas, le nom xsimple s´affichera dans le bandeau du window-manager).
Enfin, la fonction XMapWindow affiche la fenêtre à l´écran.
for (;;) {
XEvent ev;
char c;
XNextEvent (display, &ev);
switch (ev.type) {
case Expose :
expose ();
break;
default :
break;
}
}
}
Voici la partie "active"du programme. C´est une boucle infinie de lecture des évènements X (appel à la fonction XNextEvent). Les évènements sont ensuite traités suivant leur type (ev.type) dans un switch (dans notre cas, seul l´évènement Expose est associé à une fonction)
Pour compiler ce programme sous l´environnement de développement X, on pourra utiliser le fichier Imakefile suivant :
LDLIBS = $(XLIB)
SimpleProgramTarget(xsimple)
avec la séquence suivante :
"xmkmf" pour générer le Makefile à partir de l´Imakefile
"make depend"pour générer les dépendances des fichiers à la fin du Makefile
"make all" pour compiler le programme .
à toi de m'éxpliquer ce que je dois faire une fois que je tape le code en C.
Merci
3 oct. 2003 à 19:33
Il doit etre dans le répertoir ou est ton fichier source...
Ensuite en tapant "xmkmf -a" ca devrait marcher...
3 oct. 2003 à 19:58
Tu ne peux pas me donner un exemple de création de fenêtre en "C".
merci
3 oct. 2003 à 20:08
Et ce n'est pas du tout la meme syntaxe que le prog au dessus.
Il y a tellement de fichier generés que ca risque d'etre un peu lourd copier-coller.
Mais si tu as le courage, installes Glade, et regarde sur le site http://glade.gnome.org/ , il y a quelques tutos.
bonne continuatio! @+