linkage dynamique : dans quel ordre parcourt-on les dossier concernés ?

ChachaChacha Membre
février 2006 modifié dans Actualités #1
Salut,

Suite à  un bug dans un programme, j'ai discuté un peu avec son développeur, et il est apparu que le problème vient du fait que le programme en question embarque des librairies (dynamiques) qui sont déjà  installées chez moi, mais dans une autre version (incompatible).
J'ai fait quelques essais, et effectivement, vu qu'au lancement MacOS trouve les librairies dans /usr/local/lib, il ne va pas aller les chercher dans le framework interne du programme. D'où, crash, car ce ne sont pas les bonnes.

La question est donc : comment peut-on forcer MacOS à  d'abord charger en priorité les librairies internes du prog ? Est-ce possible ? Est-ce impossible pour des raisons de sécurité ? Est-ce MacOS utilise le DYLD_LIBRARY_PATH de mon .profile ? Est-ce de la responsabilité du programmeur ou de l'utilisateur de définir cela ? Est-ce que c'est lors de l'édition de liens que ça se décide ?

Je ne me poserais pas ces questions pour un programme Unix en ligne de commande, là  je connais la réponse. Je me pose la question pour des applications .app, qui embarquent des Frameworks, et qui sont lancées "graphiquement".

+
Chacha

Réponses

  • ChachaChacha Membre
    00:11 modifié #2
    Est-ce que par hasard ma réponse ne serait pas ce passage-là  de la man page de ld :

    <br />-dylib_file install_name:file_name(32-bitonly)<br />              Specifies that a dynamic shared library is in a different  loca-<br />              tion  than  its standard location. Use this option when you link<br />              with a library that is dependent on a dynamic library,  and  the<br />              dynamic  library  is  in a location other than its default loca-<br />              tion.  install_name specifies the path where  the  library  nor-<br />              mally  resides.  file_name specifies the path of the library you<br />              want to use instead.  For example, if you link to a library that<br />              depends  upon  the  dynamic  library  libsys and you have libsys<br />              installed in a nondefault location, you would use  this  option:<br />              -dylib_file /lib/libsys_s.A.dylib:/me/lib/libsys_s.A.dylib.<br />
    


    +
    Chacha
Connectez-vous ou Inscrivez-vous pour répondre.