Erreur de compilation d'un programme en "C&qu
Abdel Majid
-
asevere Messages postés 13522 Date d'inscription Statut Webmaster Dernière intervention -
asevere Messages postés 13522 Date d'inscription Statut Webmaster Dernière intervention -
Bonsoir tout le monde, voilà, j'ai téléchargé un exemple écrit en "C" pour créer une fenêtre sous RedHat,mais voilà :
dans le programme , je dois faire appel à la biblioyhéque "X11/XLib.h", mais quand je compile :
make nomdefichier où
cc -onomdefichier nomdefichier.c où ...
je reçois ces messages :
cc nomdefichier.c -o nomdefichier
/tmp/ccyNCTZZ.o(.text+0X17): In function 'main' :
: référence indéfinie vers "XOpenDisplay"
/tmp/ccyNCTZZ.o(.text+0X2b): In function 'main' :
: référence indéfinie vers "DefaultScr"
/tmp/ccyNCTZZ.o(.text+0X6d): In function 'main' :
: référence indéfinie vers "DefaultScree"........
les "XOpenDisplay" et "DefaultScr" et "DefaultScree", sont des noms de fonctions qui sont appelés dans le programme écrit en langage "C".
Est ce que quelqu'un peut m'aider pour réaliser ce petit programme?
Merci à tout le monde
dans le programme , je dois faire appel à la biblioyhéque "X11/XLib.h", mais quand je compile :
make nomdefichier où
cc -onomdefichier nomdefichier.c où ...
je reçois ces messages :
cc nomdefichier.c -o nomdefichier
/tmp/ccyNCTZZ.o(.text+0X17): In function 'main' :
: référence indéfinie vers "XOpenDisplay"
/tmp/ccyNCTZZ.o(.text+0X2b): In function 'main' :
: référence indéfinie vers "DefaultScr"
/tmp/ccyNCTZZ.o(.text+0X6d): In function 'main' :
: référence indéfinie vers "DefaultScree"........
les "XOpenDisplay" et "DefaultScr" et "DefaultScree", sont des noms de fonctions qui sont appelés dans le programme écrit en langage "C".
Est ce que quelqu'un peut m'aider pour réaliser ce petit programme?
Merci à tout le monde
A voir également:
- Erreur de compilation d'un programme en "C&qu
- Programme demarrage windows - Guide
- Mettre en veille un programme - Guide
- Desinstaller un programme - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
- Fermer un programme de force - Guide
/*
* 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
Il doit etre dans le répertoir ou est ton fichier source...
Ensuite en tapant "xmkmf -a" ca devrait marcher...
Tu ne peux pas me donner un exemple de création de fenêtre en "C".
merci
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! @+