Xlib.h Xutil.h introuvable

dardarmotus Messages postés 24 Date d'inscription mercredi 10 septembre 2003 Statut Membre Dernière intervention 27 mai 2004 - 23 avril 2004 à 16:31
dardarmotus Messages postés 24 Date d'inscription mercredi 10 septembre 2003 Statut Membre Dernière intervention 27 mai 2004 - 19 mai 2004 à 16:32
dardarmotus 8-)

Salut les pros.

Ce message s'adresse aux personne familière avec la prog en C sous système unix.

Je programme actuellement une app en C sous Linux dans laquelle je dois utiliser une fenêtre créée par mes mimines.

J'ai donc au debut de mon prog insérer la ligne :
#include <X11/Xlib.h>

Et lors de la compilation, je me fais insulter car le fichier Xlib.h n'existe pas.

Apparemment ça doit se trouver sous usr/X11R6/include/X11/
mais de toute façon c'est pas du tout sur ma machine.

Donc, SVP, d'où k'c'est qu'on peut telecharger Xlib.h OU Comment qu'on installe ce fichier.

Par avance MERCI

9 réponses

cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 3
23 avril 2004 à 21:31
Si tu as les CDROMS de ta distrib il y forcément un rpm pour ceci, sinon, tu trouveras ca sur le site de X (X.org).
Alé, bonne chance.
Bouba
0
MetalDwarf Messages postés 241 Date d'inscription mardi 29 octobre 2002 Statut Membre Dernière intervention 23 janvier 2006
24 avril 2004 à 18:20
C est parce que tu n as pas installe les paquetage de developpement pour xfree...
regarde avec apt-get si tu es sous debian ou avec urpmi si tu es sous mandrake, ou...

Avec Debian le paquetage doit s appeler libxfree86<version>-dev ou un truc de ce style.
0
dardarmotus Messages postés 24 Date d'inscription mercredi 10 septembre 2003 Statut Membre Dernière intervention 27 mai 2004
17 mai 2004 à 17:52
dardarmotus 8-)

J'ai trouvé sur mes CD d'install un fichier xf86.rpm mais lorsque je l'installe je n'ai toujours pas la librairie XLib.h
sur mon PC.

Sur le site X.org je ne trouve pas non plus le fichier *.rpm à télécharger.

Un truc que je ne comprend pas c'est pourquoi mon OS a un interface graphic qui fonctionne alors que les librairie Xlib/h et Xutil.h ne sont pas sur mon PC. S'ils ne sont pas installés comment ce fait-il que je puisse avoir des fenêtre graphiques ou des jeux sur ma station LINUX?
0
MetalDwarf Messages postés 241 Date d'inscription mardi 29 octobre 2002 Statut Membre Dernière intervention 23 janvier 2006
17 mai 2004 à 18:25
Ou la tu confonds pas mal de choses.
Oui les librairies de Xfree86 sont installees sur ton systeme, mais ca n a aucun rapport avec les headers dont tu parles!!
Les librairies en question sont des fichiers .so.
Les fichiers .h sont simplement des definitions de fonctions, de structures et de types en langage C. Tu peux tres bien utiliser la lib sans ces fichiers, et c est d ailleurs le cas par defaut sur l immense majorite des distributions (sauf peut etre gentoo et LFS).

Il faut que tu installes les RPM de DEVELOPPEMENT, que tu peux trouver sur le site de xfree86, ou alors sur les CDs de ta distrib (si tu as une mandrake regarde avec urpmi, pour red hat je sais pas).

@+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dardarmotus Messages postés 24 Date d'inscription mercredi 10 septembre 2003 Statut Membre Dernière intervention 27 mai 2004
18 mai 2004 à 15:33
dardarmotus 8-)

Ok c'est bon j'ai installé le package et j'ai bien mes header sous usr/X11R6/include/X11.

Maintenant j'ai mon programme, mais quand je le compile j'ai des erreurs sur les fonction contenues dans Xlib.h

Voici le prog et les erreurs :

-------------------- Programme ------------------

#include <X11/Xlib.h>

void CreerFenetre(void);
void PoserFenetre(void);
void ContexteGraphique(void);
void OuvrirConnexion(void);
void BoucleEvenements(void);

Display *dpy;
int ecran;
Window fen;
GC ctx;

main(int argc,char **argv)
{
OuvrirConnexion();
CreerFenetre();
PoserFenetre();
ContexteGraphique();
BoucleEvenements();
}

void CreerFenetre(void)
{
fen=XCreateSimpleWindow(dpy,DefaultRootWindow(dpy),30,40,500,300,6,BlackPixel(dpy,ecran),WhitePixel(dpy,ecran));
XstoreName(dpy,fen,"Prog");
}

void PoserFenetre(void)
{
XMapWindow(dpy,fen);
}

void ContexteGraphique(void)
{
ctx=DefaultGC(dpy,ecran);
}

void OuvrirConnexion(void)
{
dpy = XOpenDisplay(0);
ecran=DefaultScreen(dpy);
}

void BoucleEvenements(void)
{
XEvent evmt;
char * nom ="Debut!";

XSelectInput(dpy,fen,ButtonPressMask);

for(;;)
{
XNextEvent(dpy,&evmt);
if (evmt.type == ButtonPress)
{
if (evmt.xbutton.button == Button1)
exit (0);
XDrawingString(dpy,fen,ctx,100,100,nom,strlen(nom));
}
}
}

-------------------- Compilation ------------------

Script started on Tue May 18 12:28:57 2004
bash-2.03# gcc -c premier.c
bash-2.03# gcc -o premier premier.c
/tmp/ccD1maoU1.o: In function `CreerFenetre':
/tmp/ccD1maoU1.o(.text+0xa6): undefined reference to `XCreateSimpleWindow'
/tmp/ccD1maoU1.o(.text+0xc6): undefined reference to `XstoreName'
/tmp/ccD1maoU1.o: In function `PoserFenetre':
/tmp/ccD1maoU1.o(.text+0xf0): undefined reference to `XMapWindow'
/tmp/ccD1maoU1.o: In function `OuvrirConnexion':
/tmp/ccD1maoU1.o(.text+0x136): undefined reference to `XOpenDisplay'
/tmp/ccD1maoU1.o: In function `BoucleEvenements':
/tmp/ccD1maoU1.o(.text+0x17c): undefined reference to `XSelectInput'
/tmp/ccD1maoU1.o(.text+0x18e): undefined reference to `XNextEvent'
/tmp/ccD1maoU1.o(.text+0x1da): undefined reference to `XDrawingString'
bash-2.03#
Script done on Tue May 18 12:29:01 2004

Désolé c'est un peu long.

A quoi sont dues ces erreurs ?

(Merci pour votre aide).
0
cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 3
18 mai 2004 à 15:55
C'est tout a fait normal. Tu a oublié le chemin des librairies (*.so en général) de X11.
Faits ce petit makefile (copie les lignes qui suivent sous un fichier 'Makefile' et enregistres)

LIB = /usr/X11R6/lib/
premier: premier.o
gcc -L ${LIB} -lX11 premier.o -o premier
premier.o:
gcc -Wall -c premier.c

Ensuite sous le bash tu tapes juste
'make'
'./premier'

Et voila le resultat !!!
Bonne prog.
++.
Bouba
0
dardarmotus Messages postés 24 Date d'inscription mercredi 10 septembre 2003 Statut Membre Dernière intervention 27 mai 2004
19 mai 2004 à 14:49
dardarmotus 8-)

Désolé mais je suis une quiche en prog sous unix.
D'habitude je crée des app en VC++ et en VB.net sous windows. Mais la exceptionnellement je programme sous LINUX Suse 6.3 et je dois afficher les résultat de mon traitement dans une fenêtre UNIX.

Qu'est ce qu'un fichier makefile ?
A quoi ca sert ?
Quelle est son extension ?
Quel nom je dois lui donner ?
Ou dois-je l'enregistrer ?

Merci
0
cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 3
19 mai 2004 à 15:07
Un fichier makefile permet d'automatiser un certains nombre de tâches et commandes. Il existe des gourou du Makefile, lorsque l'on sait bien s'en servir on peut gagner un temps précieux et faire des trucs pas mal.
Ici, le makefile permettra de compiler ton programme, ce n'est pas vraiment necessaire dans ton cas car tu n'as qu'un seul fichier, mais lorque l'on doit compiler 10 voir 100 fichiers, mieux vaut faire un makefile plutôt que de ce tapper a chaque fois 100 lignes de compilation sur la console a chaque fois que l'on compile son programme.
Au niveau de l'extension, c'est simple, y'en a pas. Sous UNIX l'extension ne sert a rien.
Tu dois donc appeler ton fichier
Makefile
Tu l'enregistres ou se trouvent tes sources.
On aurait pu l'appeler autrement mais il aurait fallut passer le nom du fichier avec une option a la commande make.
Si je me souviens bien ce doit être.
make -f nom_du_makefile
Mais quand le fichier s'appel makefile on tappe juste
make
Bon, y'a pleins de trucs a apprendre a ce niveau mais je pense que ce doit suffir. Si tu veux plus de précisions faits un man.
Bonne chance.

bouba
0
dardarmotus Messages postés 24 Date d'inscription mercredi 10 septembre 2003 Statut Membre Dernière intervention 27 mai 2004
19 mai 2004 à 16:32
dardarmotus [8]

SUPER CA MARCHE

juste une petite modif sur le script que tu m'as filé

LIB = /usr/X11R6/lib/
premier: premier.o
gcc -L ${LIB} -lX11 premier.o -o premier
premier.o: premier.c
gcc -Wall -c premier.c

Merci à MetalDwarf et Bouba pour votre aide précieuse.
0
Rejoignez-nous