Voila, je suis étudiant en école d'ingénieur et j'ai un projet en langage C à réaliser. Ce projet contiendra une interface graphique utilisant la librairie X11 (propres au systemes Unix)
Ma question est de savoir si une telle lmibrairie est imp)lementée à OS X ou , dans le cas contraire, si il était possible de l'installer ...
Merci
Bonjour,
Va faire un tour du côté de :
fink.sourceforge.net
C'est un peu laborieux à faire mais CA VAUT LE COUP ! Ca marche vraiment très bien.
A+
c'est tellement laborieux que j'arrive pas à l'installer ... :pleur2: :pleur2:
Si tu es sous Jaguar il n'existe pas encore de version officiellement compatible de fink. En plus il faut se tapper dselect et c'est vrai que c'est pas tout le temps évident.
Je te conseilles de te pencher sur : http://www.osxgnu.org/
Tout n'a pas été porté pour Jaguar (même quasiment rien en fait) mais t'as au moins XFree86 et les librairies qui vont avec, histoire de pouvoir compiler.
okai, je vais demander a un de mes potes qui a l'ADSL de me le telecharger (50Mo)
Merci beaucoup
Bonjour,
Fink est TOTALEMENT compatible avec Jaguar !!! Je travaille avec Fink depuis que j'ai passé à Jaguar et AUCUN problème !!!
Cela dit, je pense qu'il vaut mieux compiler la totalité des sources... :oops: Ce qui prend PLUSIEURS heures... Mais très franchement je crois que ça vaut le coup.
Tu peux consulter :
http://fink.sourceforge.net/doc/users-guide/install.php#src
rubrique "2.2 Installing the Source Distribution"
Bien sûr, il faut avoir installéau préalable les "Developpers Tools".
Dernier conseil, il faut suivre très rigoureusement les indications concernant l'installation et la mise en route de fink.
A+
Que la force soit avec toit...
Tu peux également trouver un pas à pas en français pour l'installation de fink sous Jaguar dans PrecisionMac n°3
voila, je voulais juste savoir ce que c'était XFree86 (est ce que c'est un logiciel, un compilateur ou juste des librairies ??)
De plus si je fais une interface graphique avec X11 dans mon école, est ce que je peux faire tourner cette appli chez moi ???
En tout cas merci pour toutes vos reponses.
J'en profite pour redemander c'est quoi la ligne de compile pour integrer les librairies Xlib.h ?
J'ai un vague souvenir de -Ilib ... mais bon j'ai pas trouve ca dans le man de cc.
merci
Pas compatible Jaguar ? J'ai eu a l'apple expo un CD donne d'Apple europe education qui contient une install Jaguar complete (la seule me semble t'il, sur le net on ne trouve que le patch...)
Je confirme donc que X11 est compatible jaguar (pour l'utiliser de maniere tres reguliere...et la pérsence de ce CD.)
Voila.
Oups, j'ai repondu a cote..
Je vais me couche il est grand temps...
Si quelqu'un a la reponse a ma Q ca m'arrangerait beaucoups. Merci.
Merci samsam, en fait mes souvenir etaient faux, il faut bien mettre 2 "-L"...
Je chercherai les librairies a inclures (xlib.h c'est sûr mais pour l'autre je ne vois pas encore de quoi il sagit.)
Merci encore.
Tout d'abord, j'ai installé XFree86 et ca marche pas mal du tout . Merci.
J'ai par contre un petit pb pour la compilation. Voila, j'ai fait un petit programme qui ouvre une fenetre et y dessine un rectangle vert. Pour compiler tout ca, j'utilise la commande "gcc".
Le probleme :
J'utilise la librairie Xlib.h qui fait elle meme appel à la librairie X.h.
Dans la librairie Xlib.h, il y a la commande :
#include <X11/X.h>
et que lorsque je compile, il me dit qu'il y a une erreur car il ne trouve pas la librairie X.h .
(ca fait ca pour d'autres appels de librairies)
(ca marcherais si on mettais #include "/usr/x11r6/include/x11/X.h")
Ca vient evidement d'un pb d'adressage des librairies.
Je voulais savoir si il y avait une option a ajouter à la commande "gcc" pour ne plus avoir ce probleme ...
J'ai reussi a faire fonctionner mon pgm en changeant toutes les adresses de toutes les librairies mais c'est vraiment trop penible et vraiment pratique.
Est ce que qq un a une solution ???
Merci
C'est en fait ma question de tout a l'heure (au dessus.
Il faut mettre -L/usr/X11R6/lib ainsi qu'une autre "option" pour que gcc compile en utilisant les bonnes librairies.
Je me souviens que j'avais fais un gccg (g pour graphique) qui etait un lien vers cette ligne. Malmheureusement, c'etait sur mon DD de 60 Go qui est mort.
Il me semble que la reponse venais d'ici meme, (Nucleus me semble t'il ?) mais je ne retrouve pas le post... :pleur2: :pleur2:
[MAJ]
Voila j'ai retrouve le forum en question. Il faut mettre -I/usr/X11R6/include -L/usr/X11R6/lib
dans la ligne de commande. (en fait c'est meme moi qui ai donne l'astuce provenant d'un "expert" en Eiffel qui a écrit des librairies graphique pour ce langage. Nucleus a bien entendu corrige le probleme en question et complete ma reponse (j'avais mi X11 au lieu de X11R6 :oops:
Avec ca ca devrait aller mieux..
[MAJ]
[/quote]
ARGH ! Ca ne fonctionne pas non plus :
J'ai un message "ld: Undefined symbols:"
Et toute une liste dans le style : "_XClearWindow"
voila ma ligne de commande pour compiler :
"gcc -I/usr/X11R6/include -I/usr/X11R6/include/X11 -L/usr/X11R6/lib /Users/swecker/Documents/fractale_x.c
"
SVP Aidez moi :pleur2: :pleur2: :pleur2:
Peut-être que XClearWindow est pas implémenté dans XFree86. Là il faudrait plutôt voir avec des développeurs qui utilisent XFree86, plutôt que Mac en particulier.
Ou au moins les gens de fink.
J'ai peut-être dit une connerie (et je vais peut-être en dire une autre).
En fait quand tu utilises ta ligne de commande, à la fin il va te générer un a.out qui sera ton executable. Est-ce que c'est bien ce que tu veux ? Auquel cas il faut peut-être le compiler avec une librairie qui se chargera d'appeler la bonne libraire du système pour toi. Sous Windows, ca serait linker avec le .lib correspondant. A priori ca doit être un truc du style "-lX11" à ajouter à ta ligne de commande.
Bref, il te manque peut-être une librairie.
Pour info, t'auras quasiment la même ligne de commande (au path près) sur tous les systèmes.
Je viens d'assayer tout ca (ajouter -IX11, et -L/sw/bin) mais rien n'y fait.
Les fonction _XClearWindows (et companie) n'existent pas dans le fichier xlib.h mais non plus dans le source c a compiler.
Par contre, il existe bien des fonction sans le "underscore" devant dans les xlib.h.
Je pense qu'il y a une erreur (gcc ?) qui renome les fonction puis ne les trouve plus. C'est stuipide comme pensee, mais c'est ce qui me parrait le plus probable.
Salut...
Je déterre un peu le sujet, mais j'ai un problème similaire. Sauf que depuis, avec le X11 d'Apple, les choses ont un peu évoluées. J'ai installé X11 et le SDK de X11, et j'ai essayé de compiler un programme que j'avais fait à mon école sous Linux, et voilà ce qu'il donne:
Ca serait pas mal que tu montres un coup ton makefile qu'on puisse voir ce qu'il y a dedans.
Tout ce que je peux te dire, et à mon avis c'est de la que ton problème vient; c'est que ton installation de X11 est incomplète car je viens de faire une recherche est les 3 librairies qui te manquent se trouve dans /usr/X11R6/include/X11 sur mon disque.
Les 3 liibrairies qu'il me manquent sont aussi dans ce même répertoire chez moi!
Pour le makefile, je vais le mettre ici, mais j'avoue que c'est ma prof d'info qui me l'a fait, car c'est la première fois que j'utilisais ça
Comme tu peux le voir le répertoire de l'alias LIBS ne convient pas.
il faut que je remplace:
LIBS = -L/usr/X11R6/lib -lX11 -lm
par
LIBS = -L/usr/X11R6/include/ -lX11 -lm
Ca suffit???
@+
Commences par remplacer par le bon répertoire et on verra apres.
Exact. De plus pas besoin de fink pour en arriver la, X11 d'apple suffit. :fou:
Enfin, je sais que beaucoups ne jurent que par fink, mais X11 est aussi un free86 like compatible avec ses librairies.
PS : J'ai fait un tel projet aussi uniquement sous OSX, mefie toi du compilateur de l'ecole (version< 2.9), tout ne fonctionne pas, mon projet marchait sur mac, mais pas sur l'Unix de l'ecole (Sun)...
C'est bien le X11 d'Apple que j'ai utilisé.
Je relance le sujet, car je ne m'en sort pas. Je veux bien remmetre les bons répertoires, mais qu'est-ce qu'il faut que je mette exactement?
Merci.
@+
Attention, confusion entre librairies et headers !
Il ne faut surtout pas mettre "LIBS = -L/usr/X11R6/include/ -lX11 -lm" !
Bon une petite explication sur les options du compilo concernant les libs et les headers :
un header, c'est un fichier donnant la "signature" des fonctions d'un code. Il se présente sous la forme d'un fichier .h. Une librairie, c'est ce qui contient le vrai code respectant lesdites signatures. Par exemple pour compiler une appli qui utilise X11, il faut les headers X11 pour que le compilo il vérifie les fonctions X11 que tu appelles. Ensuite, quand tout le code est compilé, il faut créer l'exécutable (ou la librairie si on fait une lib) en "linkant" avec les librairies X11.
Alors l'option -I c'est pour indiquer au compilo dans quels répertoires aller chercher les headers. Par défaut il va dans des endroits comme /usr/include, /usr/local/include, etc. Pour X11, il faut ajouter le chemin /usr/X11R6/include qui contient tous les headers de X11. On peut ajouter plusieurs chemins avec plusieurs -I. Ainsi, quand le compilo voit dans le code un "#include <toto.h>" il va chercher un fichier nommé toto.h dans tous les répertoires par défaut et indiqués par les -I. Et pour "#include <truc/tutu.h>" il va chercher les répertoires nommés truc qui possèdent un fichier tutu.h.
De même, l'option -L c'est pour les libs : on indique les chemins des répertoires contenant les libs. Pour X11, elles sont dans /usr/X11/lib, et pas du tout dans /usr/X11R6/include, d'où ton erreur (le makefile est bon de ce point de vue). Et l'option -l c'est pour indiquer quelles librairies on utilise (link), et le compilo va les chercher... dans les chemins indiqués par les -L, la boucle est bouclée [oui il y a aussi des chemins par défaut : /usr/lib/, etc]
Bon maintenant ton makefile, oui, il est moisi
LIBS est bon, il indique bien le chemin où aller chercher la lib X11 (et dit aussi de linker avec une lib de math trouvable dans le chemin par défaut). Mais il manque les headers ...
Une solution, ajouter avant CFLAGS :
X11HEADERS = -I/usr/X11R6/include
Puis modifier CFLAGS :
CFLAGS= -Wall -g $(X11HEADERS)
Merci beaucoup pour tes explications! J'ai fait ce que tu as dit, mais il me reste un erreur (qui n'apparait pas quand je compile sous Linux):
Hum, j'ai une bonne et une mauvaise nouvelle. Mais la bonne, tu t'en doutes : tu as progressé
Là tu en es à la phase de link, c'est à dire que tout a bien compilé, il a trouvé tous les headers, et a correctement compilé le code. Il a même été plus loin : il a trouvé toutes les librairies que tu lui as dit de chercher (X11 et la libm). Mais il lui manque un symbole, c'est à dire qu'il faudrait que tu lui indiques une autre librairie qui manque (avec un -l et au besoin un -L). Ca c'est la pure théorie.
En pratique, ce fameux symbole qui te manque, _ftime, c'est très très bizarre : moi je ne connais de _ftime que celui qui permet de mesurer le temps d'exécution d'un code avec VisualC++... Sous UNIX, c'est plutôt time. Mais si c'était vraiment du VisualC++, le compilo aurait râlé bien avant le link, dès la compilation : il n'aurait pas trouvé la fonction _ftime(). Alors donc là perso je sais pas trop, peux-tu trouver les éventuels appels à une fonction _ftime, ftime, ou time partout dans ton code ? Et les fichiers qui font #include <time.h> aussi, et nous dire un peu ce que c'est sensé faire ? Ton code est-il censé calculer combien de temps il prend à s'exécuter ?
[EDIT] Euuuh ok, le symbole _ftime, c'est probablement ftime() de timeb.h. C'est sensé être obsolète comme fonction.
man -S 3 ftime :
[...]
This interface is obsoleted by gettimeofday(2). It is available from the compatibility library, libcompat.
Conclusion : il faut que tu installes la lib compat.
http://www.publicsource.apple.com/projects/darwin/1.3/source/apsl/Libcompat-14.1.tar.gz
et il faut être membre, etc, enfin c'est gratuit mais pénible
Enfin évidemment tu as le second choix de modifier le code et utiliser gettimeofday...
En fait, il y a deux versions du programme. Une optimisée, et une sans optimisation. Et donc, on m'a dit d'utiliser la fonction ftime() pour mesurer le temps du prog avec ou sans l'optimisation. Je vais essayer de compiler un autre prog ou je n'ai pas fait appel à cette lib
Merci beaucoup!
Arghh!! En fait, la fonction ftime() n'est pas utilisée dans mon code, mais surtout dans la bibliotéque fournie par la prof d'info "BiblioX11.h" qui est un fait une simplification en français de la bibliothéque X11 :pleur2:
Bon, je vais donc m'enregister sur le site...
[edit] Arf! j'avais même pas capté que c'était le site de l'ADC... J'y suis déjà enregistré en fait!![/edit]
Et comment ça s'installe ce truc au fait???? :-? :-?
Tu télécharges et tu lis les instructions.... je sais plus, c'est un des premiers trucs que j'ai faits à l'install y'a 6 mois, et je crois bien ne pas être passé par celui de l'ADC. Chais pu. Y'a bien un README quand-même ? :fou:
Et pour ta librairie(*) biblioX11, tu as dit "bibliothèque BiblioX11.h", je te rappelle qu'un fichier .h n'est pas une bibliothèque. Bref, ton Makefile suggère que tu disposes du code (BiblioX11.c), rien ne t'interdit d'aller commenter ces fichues lignes qui appellent ftime(), attention juste à le faire intelligemment et ne pas commenter de déclaration d'une variable utilisée plus loin. M'enfin tu es censé savoir ce que tu fais... sinon, repasse à la case printf("Hello, world !n");
(*) oui on devrait dire bibliothèque qui est une meilleure traduction du mot "library". M'enfin ça c vrai qd on parle de bouquins, en info on s'autorise souvent la mauvaise traduction
Okay si y'a pas de readme, alors c'est qu'il y a juste 2 ou 3 fichiers, non ? Quels sont-ils ? En gros il doit y avoir un .h et un libcompat.dylib.
Comment ça se présente l'archive ?
Pour voir ce qu'il y a dans l'archive:
http://homepage.mac.com/macjl/photos/PhotoAlbum3.html
Voir la photo: Liste.gif
C'est un beau bordel ce truc :-?
@+
Okay, en fait tu as tout ce qu'il faut pour le compiler toi-même, et donc le modifier etc. Tu t'en fous : manifestement ils donnent la librairie pré-compilée ! -> libcompat.a
C'est une lib statique (.a au lieu de .dylib, non ce n'est pas qu'une question d'extension, le contenu est totalement différent ), c'est à dire que lorsque tu vas linker ton exécutable, elle sera incluse dedans, au lieu d'être simplement référencée pour être chargée à l'exécution du programme, mais ce sont là des détails qui ne t'intéressent probablement pas pour le moment.
Donc, si je comprends bien le rôle de cette lib, il n'y a besoin d'aucun header (en fait c'est ceux du système), tu te contentes de mettre juste le fichier libcompat.a dans /usr/lib, et d'ajouter -lcompat dans ta ligne de link !
Tiens-nous au courant, j'ai pu oublier qqch ou dire des bêtises.
Courage :wink:
Bon là ça devient du bricolage pour essayer de comprendre ce qui se passe :
et si tu mets ça ?
LIBS = -L/usr/lib/ -L/usr/X11R6/lib/ -lX11 -lm -lcompat
(normalement ld cherche forcément dans /usr/lib et il n'y a pas à le préciser...)
ou ça ?
LIBS = /usr/lib/libcompat.a -L/usr/X11R6/lib/ -lX11 -lm
mffff ça commence à me dépasser, il faudrait avoir un accès à ta machine, ou que tu déposes qqpart tes sources si c'est possible (apparemment c'est un exercice de TP, ça devrait pas poser de problème de droits ), histoire que j'essaie de compiler ça chez moi et d'avoir tous les éléments pour piger.
Les sources sont ici:
http://homepage.mac.com/macjl
Ca s'appelle Tortue.tgz. Dedans il y a trois dossiers. Il vaut mieux essayer de compiler "tortue_op"
Voilà....
Merci beaucoup!!!!!
Bon encore une fois g une bonne et une mauvaise nouvelle :
la bonne : j'arrive à compiler en virant ce fichu ftime tout pourri. (je n'y parviens effectivement pas, même avec la libcompat qui est censée régler ce prob d'après le man ftime, mais qui n'a pas de symbole _ftime dedans, et le source n'a pas de ftime...)
Il faut remplacer dans biblioX11.c la fonction systime :
Ok... Je viens de changer BiblioX11.c . Ca complile bien, mais c'est vrai que ça plante dès le début. Ce qui est bizarre, car le même programme sous Linux fonctionne parfaitement.
Pour ce qui est de la propreté du code, disons que j'ai fait ça en 3 jours tout seul, alors que "les autres" ont fait ça en groupe de 4 en 2 semaines :fou: . Mais là je me cherche des excuses
Un grand merci en tout cas, car maintenant, ça compile!!!
@+
Je ressort le post à la surface:
J'ai été confronté au même problème cette année avec BiblioX11. Donc je me suis replongé dans cette foutue librairie, et finalement, ça marche. En fait, il suffit de rajouter un :
t'arrives à faire un résumé de ce que tu as fait?
style ce que tu avais avant et ce que tu as maintenant
Je profites de ce post sur les librairies pour poser ma petite question. J'ai installé récemment les librairies pour faire tourner un logiciel sous x11, il s'agissait de kxstitch qui demande une grande partie des librairies kde pour fonctionner. Je me suis donc atteler avec fink commander à les compiler-installer et c'est bon mon programme tourne.
Depuis j'ai voulu installer le compilateur fortran g14 et impossible, il demande absolument à compiler d'abord libjpeg et ensuite, j'ai le droit à ce message d'erreur:
Reading Package Lists...
Building Dependency Tree...
You might want to run `apt-get -f install' to correct these:
Sorry, but the following packages have unmet dependencies:
libjpeg: Depends: libjpeg-bin but it is not going to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).
Si quelqu'un avait la gentillesse d'éclairer ma lanterne
Propulsé par Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)