Re: Liens symboliques

Top Page

Reply to this message
Author: Olivier_Allard-Jacquin
Date:  
To: guilde
Subject: Re: Liens symboliques


> Petite colle a propose de liens symboliques.
>
> La config :
>
>    /opt/titi -> /opt/titi-x.y.z             ( -> = lien symbolique)
>    /usr/local/bin/toto -> /opt/titi/toto

>
> me donne un beau segmentation fault lorsque je lance toto (/usr/local/bin
> est dans mon PATH). Par contre :
>
>    /usr/local/bin/toto -> /opt/titi-x.y.z/toto

>
> marche tres bien. Pourquoi ? Est-ce du aux liens symboliques, ou plutot

au
> programme ? Les liens symboliques ne sont-il pas transparents ?



      Je pense que ton problème n'est pas lié aux liens, mais au
programme lui-même. J'ai fait un test de ton exemple avec Cygwin (d'accord,
ce n'est pas Linux ...), et la marche très bien


      Je suppute que le programme cherche à savoir quel est son emplacement
sur le disque dur, afin de localiser les répertoires dont il a besoin
(par exemple ./titi-x.y.z/lib, ./titi-x.y.z/datas, ./titi-x.y.z/tmp, etc
..).
Pour cela, il ne doit pas utiliser une methode standard, et ne trouvant pas
le répertoire de "base", il plante dans un beau "segmentation fault" (je
pense
qu'il doit chercher ses sous-répertoires dans "/usr/local/bin/" ... )


      Pour vérifier ca, lance "strace /usr/local/bin/toto", et tu verras
sans doute un message comme quoi il n'arrive pas à trouver un
fichier/répertoire
du "/usr/local/bin/"


      Une astuce pour éviter ce problème est de créer un "wrapper"
(anglicisme, certes, mais la traduction du mot en Français est assez
ridicule ..)
qui va lancer le programme:
- Supprime le lien /usr/local/bin/toto -> /opt/titi/toto
- Crée un fichier texte /usr/local/bin/toto qui contient:
    #!/bin/sh -norc


    cd /opt/titi/
    exec ./toto
- rendre executable "/usr/local/bin/toto": chmod +x /usr/local/bin/toto



      Voila ...


                                    Olivier