# Lancer une appli ds X11



## Philippe Guérin (4 Juillet 2004)

Bonjour à tous,

désolé pour ces questions fort basiques pour certains d'entre vous.
Je souhaitai faire tourner fontforge sur mon Mac (avec X11).
Je n'ai pas utiliser Fink ni FinkCommander. Simplement télécharger un package de FontForge sur mon bureau.
Maintenant j'ai bien un fichier exécutable fontforge dans /usr/local/bin/
Pour le lancer, je déplace son icone dans Terminal (il doit y avoir d'autres commandes plus unixienne, je suppose !).
Terminal m'affiche :

dyld: /usr/local/bin/fontforge can't open library: /lib/libgdraw.1.dylib  (No such file or directory, errno = 2)
Trace/BPT trap

Il doit manquer des bibliothèqes, où puis-je les trouver ?
Ou mon installation, à partir du packae, n'est pas complète ?

Merci de vos conseils,

Phil


----------



## kabutop (4 Juillet 2004)

Hello,
Bienvenue sur les forums 
Il cherche la lib dans /lib... a mon avis c'est pas bon.
Commence par faire une recherche dans le terminal via cette commande :
find / -name libgdraw.1.dylib
Si elle est installée par ton soft, elle est certainement dans /usr/local/lib

A+


----------



## Philippe Guérin (4 Juillet 2004)

Salut !

En fait, c'est Terminal qui cherche cette biblio lorsque je veux lancer FontForge (Terminal m'affiche alors les lignes suivantes :
dyld: /usr/local/bin/fontforge can't open library: /lib/libgdraw.1.dylib (No such file or directory, errno = 2)
Trace/BPT trap

J'ai cherché sur /usr/local/lib, je trouve ces 2 fichiers :
libgdraw.la
libgunicode.la

QuoiKes ? En tout cas certainement pas libgdraw.1.dylib

A +

Philippe


----------



## kabutop (4 Juillet 2004)

Re,
Je vois pas trop pourquoi il va chercher dans /lib (qui n'existe pas) et je ne comprend pas le format de cette lib...
Si tu fais otool -L /usr/local/bin/fontforge , ca te donne quoi ?

A+


----------



## Philippe Guérin (5 Juillet 2004)

Si tu fais otool -L /usr/local/bin/fontforge , ca te donne quoi ?

A+[/QUOTE]

Terminal m'affiche ça :

/usr/local/bin/fontforge:
/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 14.0.0)
/lib/libgdraw.1.dylib (compatibility version 2.0.0, current version 2.8.0)
/lib/libgunicode.2.dylib (compatibility version 3.0.0, current version 3.2.0)
/usr/X11R6/lib/libSM.6.dylib (compatibility version 6.0.0, current version 6.0.0)
/usr/X11R6/lib/libICE.6.dylib (compatibility version 6.3.0, current version 6.3.0)
/usr/X11R6/lib/libXi.6.dylib (compatibility version 6.0.0, current version 6.0.0)
/usr/X11R6/lib/libX11.6.dylib (compatibility version 6.2.0, current version 6.2.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 60.2.0)
/usr/lib/libz.1.1.3.dylib (compatibility version 1.0.0, current version 1.1.3)

C'est curieux, car là il semble trouver les lib libgdraw et libgunicode?


----------



## iManu (5 Juillet 2004)

Philippe Guérin a dit:
			
		

> C'est curieux, car là il semble trouver les lib libgdraw et libgunicode?


Non, là il te dit simplement ce dont il a besoin.
Ca me semble curieux quand même quand on sait qu'il n'y a pas, normalement, de /lib sur ton Mac...
Et si tu re-installais ?


----------



## Philippe Guérin (6 Juillet 2004)

Réinstaller FontForge ?
Pourquoi pas ! 
Y a-t-il une procédure via Terminal pour installer le package de FontForge (actuellement sur mon bureau) ? Cela serait certainement plus propre que le bidouillage que j?ai dû faire?
Mais avant cela, une précision :
Dans un premier temps, j?avais dû faire de mauvaises manips (avec PICO).
Bref ! X11 plantais. Du coup, j?ai viré dans mon dossier utilisateur 2 fichiers intempestifs :
 .xinitrc.save
 .xinitrc.swp
et dans les préf, le fichier de préf de X11. X11 a pu redémarrer.
Maintenant j?ai dans mon répertoire un fichier .xinitrc.old. (le fichier xinitrc d?origine est toujours dans /private/etc/X11/xinit)?

Il y a peut-être un fichier d?initialisation ou d?environnment qui fout la « merde » (je me trouve aussi avec un fichier cshrc.swp)?


----------



## iManu (6 Juillet 2004)

A vue de nez, comme ça, je ne crois pas que ton souci soit lié à X11.
De toutes façons, moi je ne l'utilise pas, j'ai simplement fait:
 setenv DISPLAY :0
dans ma config tcsh (l'équivalent existe pour bash si c'est le shell que tu utilises), et j'utilise le terminal après avoir lancé X11 juste pour le serveur Xwindow (pas de Xterm).

Sur l'install, t'as quoi dans le fichier read me, ou dans la doc ?
T'as pas des variables à configurer ?
Ca me fait penser à une erreur que j'ai déja commise, qui est de donner /lib au lieu de lib comme chemin pour des librairies...
Dis nous en un peu plus et on pourra t'aider mieux


----------



## kabutop (6 Juillet 2004)

Si je me trompe pas... c'est des binaires qui sont dispo pour Mac que Philippe à téléchargé. Donc les libs nécessaires sont cencées être compilées en statique.
Donc, a mon avis, le package fourni n'est pas le bon.
Essaye de voir avec les sources ... 

A+


----------



## Philippe Guérin (6 Juillet 2004)

Effectivement, j'ai téléchargé des binaires : il me semblait que c'était moins em? à utiliser que les sources (pour un Unixien fraîchement converti comme mézigue !).
Rien à faire de bon avec ce que j?ai ? 
Au fait, ça veut dire quoi « compiler en statique » ?

Autrement, voilà ce que le package affiche :
Archive.bom, Archive.pax.gz, Info.plist, PkgInfo
ainsi que des Ressources.
Pour le read-me, je joins le texte (c?est mieux qu?une longue explication). Il demande de paramétrer une variable d'environnement MANPATH. Ce que j'avais dû faire (mais j'ai peut-être « foiré » à ce niveau).

A+

Phil


----------



## iManu (7 Juillet 2004)

je viens de lire le readme.doc, et je vois rien de bien méchant...
La variable MANPATH, bien qu'importante (c'est la doc) n'est pas indispensable.
Par contre la variable PATH, elle, est importante.
Compiler en statique ou en dynamique, c'est juste deux manières d'installer. Dans la première (statique) tu construis le programme et les librairies dont il a besoin comme un seul morceau. C'est quelque part plus facile, mais ça fait un exécutable plus gros, et tu dupliques des librairies car tu risque d'en avoir plusieurs exemplaires sur ta machine au lieu d'un seul, qui serait appelé au lancement de l'application (dynamique). Pas forcément un souci, donc. Si je dis des bétises, Kabutop me corrigera...

Par contre, regarde ta variable PATH au cas où elle serait mal configurée.
elle devrait être à: /usr/local/bin
de même, DYLD_LIBRARY_PATH doit pointer vers  /usr/local/lib
Si tu utilises tcsh, fais juste setenv pour voir toutes tes variables globales, ou bien echo $PATH puis echo $DYLD_LIBRARY_PATH et dis nous ce que ça dit...

De plus, t'as essayé ce que te conseillait Kabutop au début ?
find / -name libgdraw.1.dylib
Ca permettrait d'y voir plus clair... idem, dis nous le résultat.

Bon courage


----------



## Philippe Guérin (7 Juillet 2004)

On va peut-être y voir plus clair !

- Pour la variable PATH, je n'arrive pas à la localiser (et donc encore moins à la lire), elle n'est pas dans /usr/local/bin

 - En faisant setenv j'ai entre autres ça :

SECURITYSESSIONID=20ffc0
HOME=/Users/philippeguerin
SHELL=/bin/bash
USER=philippeguerin
PATH=/sw/bin:/sw/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin
__CF_USER_TEXT_ENCODING=0x1F5:0:1
(?)
MANPATH=/sw/share/man:/usr/share/man:/usr/X11R6/man
INFOPATH=/sw/share/info:/sw/info:/usr/share/info
PERL5LIB=/sw/lib/perl5:/sw/lib/perl5/darwin
[localhost:~] philippe% 

- Pour les commandes echo $PATh et echo $DYLD_LIBRARY_PATH, j'ai :
/sw/bin:/sw/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin
et :
tcsh: DYLD_LIBRARY_PATH: Undefined variable.

- Pour la commande conseillé par Kabuko : find / -name libgdraw.1.dylib, cela donne une longue liste (assez vexante !) de « Permission denied »
find: /.Trashes: Permission denied
find: /Library/Logs/Console/philippe: Permission denied
etc.

Curieux qu'il me mette encore SHELL=/bin/bash alors que je suis repassé en tcsh dans les préfs de Terminal.
Autrement, il y a certainement un pb de variable ou  celle-ci n'est pas repérée (Undefined variable).

Merci de vos conseils (patients !)

A +


----------



## kabutop (7 Juillet 2004)

iManu a dit:
			
		

> [...] Pas forcément un souci, donc. Si je dis des bétises, Kabutop me corrigera...


 C'est exactement ca 

 Par contre, je ne pense pas que cela vienne d'un problème de PATH. Il cherche /lib... Si il cherchait la lib, sans avoir le chemin complet, effectivement le problème pourrait être celui du PATH. Mais dans le cas ou le chemin de la lib est absolu, il n'y a pas besoin.


----------



## kabutop (7 Juillet 2004)

Philippe Guérin a dit:
			
		

> On va peut-être y voir plus clair !
> - Pour la commande conseillé par Kabuko : find / -name libgdraw.1.dylib, cela donne une longue liste (assez vexante !) de « Permission denied »
> find: /.Trashes: Permission denied
> find: /Library/Logs/Console/philippe: Permission denied
> etc.


 Il faut la lancer en root... sinon effectivement, comme tu n'as pas les droits pour accéder au répertoire, ca hurle 
 Reteste en root voir si tu trouves la lib. Si tu ne la trouves pas... c'est pas la peine de chercher plus loin. Si tu la trouves, tu la mets dans le repertoire de lib dispo dans echo $PATH.

 A+


----------



## iManu (7 Juillet 2004)

On approche 



			
				Philippe Guérin a dit:
			
		

> On va peut-être y voir plus clair !
> 
> - Pour la variable PATH, je n'arrive pas à la localiser (et donc encore moins à la lire), elle n'est pas dans /usr/local/bin


Elle n'a pas à être quelque part...
Par contre, tu vois le contenu de cette variable avec le setenv:



> ...
> PATH=/sw/bin:/sw/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin
> ...


Remarque: setenv t'indique, dans un shell tcsh, toutes tes variables globales.
Faire un echo $PATH c'est juste pour afficher (echo) le contenu ($) de la variable globale PATH, ex:


> - Pour les commandes echo $PATh , j'ai :
> /sw/bin:/sw/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin





> tcsh: DYLD_LIBRARY_PATH: Undefined variable.


Oui, là tu as un souci, ta variable n'est pas définie.
Tu remarques aussi que /usr/local n'est pas défini dans ta variable PATH, or elle devrait l'être (cf le ReadMe.doc).



> - Pour la commande conseillé par Kabuko : find / -name libgdraw.1.dylib, cela donne une longue liste (assez vexante !) de « Permission denied »


Comme indiqué par Kabutop, tu peux passer en root et relancer la commande.
Si tu n'as pas activé l'utilisateur root, tu passes par sudo:

```
sudo find / -name libgdraw.1.dylib
```
Le terminal va te demander ton mot de passe administrateur, et hop...
C'est à mon avis le plus important à faire.

Ce qui suit est accessoire...


> Curieux qu'il me mette encore SHELL=/bin/bash alors que je suis repassé en tcsh dans les préfs de Terminal.


Pas complètement.
En fait, ton shell par défaut est toujours bash (ce qui se voit par le setenv), mais dans tes prefs de terminal, tu lances automatiquement un tcsh (sur le bash en quelque sorte).
La manière 'propre' de définir ton shell par défaut est d'ouvrir l'application /utilitaires/Gestionaire NetInfo (ou NetInfo Manager en anglais). A ce niveau là, dans la seconde colonne, tu as une balise users, qui va t'afficher la liste des utilisateurs de ton système (c'est surprenant, il y en a plus que ce à quoi tu t'attendais . Si tu cliques sur ton nom (philippe?) tu vois apparaitre une série 'propriété' - 'valeur(s)'. Tu vas modifier la propriété shell en remplaçant /bin/bash par /bin/tcsh, et voilou...
Si tout est grisé, il faut d'abord t'authentifier en cliquant sur le cadenas en bas à gauche.



> Autrement, il y a certainement un pb de variable ou  celle-ci n'est pas repérée (Undefined variable).


Oui, clair... au moins 2 trucs à faire, même si je suis d'accord avec Kabutoc pour dire que c'est pas sûr que tu résolves ton problème comme ça (ça risque de pas suffire).
Comme tu as installé Fink, ça veut dire que tu dois avoir un fichier .tcshrc dans ton dossier utilisateur.
Ce fichier doit contenir:

```
source /sw/bin/init.csh
```
(tu me diras si je me trompe...).
Je te conseille de créer un (ou plusieurs) fichier(s) qui contienne tes variables d'environnement.
Chez moi, j'ai crée un dossier tcsh_conf, qui contient des fichiers d'initialisation, ces fichiers étant 'sourcés' au démarrage du shell:


```
[2:47pm manu ~]% cat .tcshrc 
# init fink 
 source /sw/bin/init.csh
# personalisation de la config
 source ~/tcsh_conf/environnement
 source ~/tcsh_conf/path
# 
[2:48pm manu ~]% cd tcsh_conf/
[2:48pm manu ~/tcsh_conf]% cat environnement 
# variables globales
 setenv ABSOFT /Applications/Absoft
 setenv PRINTER E6-laser
 setenv HOST E6-TiBook
 setenv DISPLAY :0
 setenv LSCOLORS gxfxcxdxbxegedabagacad
 setenv DYLD_LIBRARY_PATH "$ROOTSYS/lib"
# autres
#
 setenv TERM xterm-color
 set prompt="%{\033[0;32m%}[%{\033[33m%}%t %n %{\033[33m%}%{\033[33m%}%c3%{\033[32m%}]%{\033[0m%}%# "
#
 set autolist
 set complete = enhance
#
 stty cs8 -istrip -parenb
 set dspmbyte = "utf8"
#
#
[2:48pm manu ~/tcsh_conf]% cat path 
# Les autres paths
 set path = ( $ROOTSYS/bin $path )
 set path = ( $ABSOFT/bin $path ) 
 set path = ( /usr/local $path ) 
 set path = ( /Users/manu/Documents/UnixPerso/scripts $path ) 
 set path = ( /opt/ibmcmp/xlf/8.1/bin $path ) 
#
[2:48pm manu ~/tcsh_conf]%
```

Il est clair que tu n'as pas besoin de toutes les variables que j'ai définies, mais il te faut au moins faire un copier/coller de ce qui est indiqué dans le readme, par exemple dans le ficher environnement:


```
setenv PATH ${PATH}:/usr/local/bin
        if ( "$MANPATH" == "" ) then
            setenv MANPATH /usr/local/man
        else
            setenv MANPATH ${MANPATH}:/usr/local/man
        endif
	   setenv DYLD_LIBRARY_PATH /usr/local/lib
```

L'intérêt:
Au démarrage de ton shell, tcsh 'cherche' un .tcshrc, et l'execute.
Dans ton cas, il va 'sourcer' successivement les fichiers:
/sw/bin/init.csh
~/tcsh_conf/environnement
~/tcsh_conf/path
si tu fais un setenv, tu vois qu'il a pris en compte le contenu de ces fichiers (par exemple dans PATH, tu auras entre autres /usr/local)
Ce qui est bien en pratique, c'est que le dossier tcsh_conf et les fichiers à l'intérieur sont visibles, et que tu peux les éditer facilement, pour rajouter des variables globales si tu en as besoin.

C'est des conseils, un peu en marge de ton problème, mais moi ça m'aide pas mal au quotidien...
J'espère que c'est à peu près clair, dis moi...
Je ne m'exprime pas forcément dans un 'pur' langage unixien, mais Kabutop est là pour relire


----------



## kabutop (7 Juillet 2004)

Vivi 
J'ai rien à dire. Nickel


----------



## Philippe Guérin (7 Juillet 2004)

J'aurais dû m'en douter pour le root !
Là il a trouvé libgdraw.1.dylib dans une partition d?un disque dur externe me servant de sauvegarde! En fait j'avais fait une sauvegarde récemment de tout un tas de choses y compris le fichier usr (ce n'est peut-être pas recommandé !).
Les lib ont bien été copiées, mais ? curieusement ? elles ont disparu du répertoire d?origine (sauf libgdraw.la et libgunicode.la).
Je rétablis ça donc en les mettant au bon endroit, dans un premier temps.

Autre point important, je ne trouve pas de fichier .tcshrc
Je vais le (re)créer. Faut-il y mettre en plus de la ligne que tu recommandes (source /sw/bin/init.csh) les 2 lignes suivantes ?
setenv PATH /usr/X11R6/bin :$PATH
setenv MANPATH /usr/X11R6/man :$MANPATH

Pour les autres réglages, je ne peux pas dire que cela me soit encore très clair, mais je règle d'abord ce problème avant de voir plus loin.

A +


----------



## kabutop (8 Juillet 2004)

Si tu as trouvé la lib... c'est déjà bon signe 
Donc pour faire simple et voir si ca marche rapidement :
Tu vas créer le fameux /lib : mkdir /lib
Puis tu copies la lib dans ce repertoire (cp malib /lib) afin que ca soit exactement comme le otool -L
Si ca marche... on verra comment faire ca plus proprement.
Si ca marche pas... on va voir pourquoi 
Courage !


----------



## Philippe Guérin (9 Juillet 2004)

Les choses avancent à grands pas !

Si j'ai bien compris, puisque terminal cherche dans le répertoire /lib, on ne va pas le contrarier. (C?est ce que j'appelle de la sagesse : se plier aux événements pour mieux les contrôler !)

 

J'ai donc copier ces libs comme tu le préconises (curieusement, je viens de m'en rendre compte, il s'agit d'alias, j'ai donc copié l'alias + son original dans /lib).
Et j'ai pu démarrer l'application dans X11. 
En ouvrant une fonte, le xterm affiche ceci :

Xlib:  extension "XInputExtension" missing on display ":0.0".

Message d?erreur ? Mais, bon ! ça semble pour le reste bien marcher ! En revanche l'aide n?a pas dû se charger ; j'irai voir sur sourceforge.net si je peux la trouver.

Il me reste évidemment à paramétrer qq fichiers (dont le fichier .tcshcr que je n?ai pas encore recréer).

A + (et merci !).


----------



## iManu (9 Juillet 2004)

Philippe Guérin a dit:
			
		

> Les choses avancent à grands pas !
> ...
> Xlib:  extension "XInputExtension" missing on display ":0.0".
> ...
> ...



Les 2 devraient pouvoir se régler comme indiqué, en faisant un .tcshrc qui appelle des fichiers de config.
Si tu n'as pas l'aide, c'est que la variable MANPATH n'est pas configurée (cf le readme.doc).
De même tu dois configurer la variable DISPLAY

Mais ça vient


----------



## tatouille (9 Juillet 2004)

Philippe Guérin a dit:
			
		

> Bonjour à tous,
> 
> désolé pour ces questions fort basiques pour certains d'entre vous.
> Je souhaitai faire tourner fontforge sur mon Mac (avec X11).
> ...



la référence de la lib est /lib car LD_LIBRARY_PATH
recherche à la racine du bin -----------> /usr/local

si tu as fait un find de ta lib et qu'elle n'existe pas effectivement.........


---------exemple tcsh

setenv LD_LIBRARY_PATH /usr/lib:/usr/local/lib:/usr/local/mysql/lib:/usr/XFce4/lib
setenv DYLD_LIBRARY_PATH ${LD_LIBRARY_PATH}
ou si ton shell est le bourne setenv==export


---------sous le terminal si ton shell est tcsh tu peux taper la commande env
qui t'indiquera tes variables d'environnement user

---------si ton shell est bourne dans ton home crées un fichier .bashrc 
---------si ton shell est c dans ton home crées un fichier .tcshrc

mais ton binaire est bien lié à une lib inexistante LD_LIBRARY_PATH
te permet de redefinir le linkage dynamique

l'auteur de ton paquet avait cette lib placée dans /usr/local/lib

avec certainement un setup

LD_LIBRARY_PATH /usr/lib:/usr/local/lib

si tu as l'archive assembly de la lib et ses headers je peux t'expliquer comment en faire
une librarie dynamique

regarde sur le site du package si tu n'a pas ommis une dépendance

man tcsh
man bash


----------



## Philippe Guérin (9 Juillet 2004)

Hello, 

Depuis j'ai retrouvé mes libs récalcitrantes, je les ai replacées dans un nouveau répertoire /lib, et FontForge peut démarrer sans grincer des dents.

Avec la commande : 
env
voilà ce que cela donne (c'est la même chose que setenv ?) :

SECURITYSESSIONID=20f900
HOME=/Users/philippeguerin
SHELL=/bin/bash
USER=philippeguerin
PATH=/sw/bin:/sw/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin
__CF_USER_TEXT_ENCODING=0x1F5:0:1

TERM_PROGRAM=Apple_Terminal
TERM_PROGRAM_VERSION=100
TERM=xterm-color
HOSTTYPE=powermac
VENDOR=apple
OSTYPE=darwin
MACHTYPE=powerpc
SHLVL=1
PWD=/Users/philippeguerin
LOGNAME=philippeguerin
GROUP=philippeguerin
HOST=localhost
MANPATH=/sw/share/man:/usr/share/man:/usr/X11R6/man
INFOPATH=/sw/share/info:/sw/info:/usr/share/info
PERL5LIB=/sw/lib/perl5:/sw/lib/perl5/darwin


Peut-être devrais-je lancer un nouveau topic, dans la mesure où ce qui suit concerne plutôt les variables (et pas seulement « lancer une appli dans X11 ») ? 
Je ne pense pas être le seul d'ailleurs à me casser la tête avec ça (c'est très peu développé dans les différentes docs, y compris chez O'Reilly).

Bref ! 
Le point qui me chagrine, c?est que j'ai un pb de configuration pour mes variables, ainsi /usr/local n'est pas défini dans la variable PATH, comment y remédier ?

Par ailleurs, dans un fichier .tcshrc j?avais mis les lignes suivantes, pensant bien faire !
# init fink
source /sw/bin/init.csh
# variables
setenv PATH /usr/X11R6/bin :$PATH
setenv MANPATH /usr/X11R6/man :$MANPATH

A la suite de quoi le shell m'envoie le message
tcsh: setenv: Too many arguments.

Du coup j'ai sucré les 2 lignes sur les variables. J'suis pas contrariant !


----------

