37 votes

Où puis-je définir DYLD_LIBRARY_PATH sur Mac OS X, et est-ce une bonne idée?

Je suis en train d'essayer d'installer un solveur écrit en C++ sur mon Mac (OS X), pour l'utiliser avec le code que j'ai écrit dans XCode.

La documentation du solveur dit ceci :

Assurez-vous d'avoir "." dans votre DYLD_LIBRARY_PATH afin de

  • exécuter les fichiers exécutables prêts à l'emploi
  • lier avec le libamg.dylib (et les gfortran RTSlibs)

Je ne comprends pas vraiment ce que cela signifie. Où et quoi dois-je changer ?

J'ai fait quelques recherches, mais je n'ai rien trouvé de suffisamment simple pour un débutant comme moi ! Si quelqu'un de patient pourrait m'indiquer une ressource en ligne ou me donner les bases sur comment et où définir des variables d'environnement, je vous en serais très reconnaissant.

26voto

Daniel Beck Points 105590

Il s'agit d'une variable d'environnement et est donc généralement définie dans Terminal par

export DYLD_LIBRARY_PATH=someValue

man dyld dit:

DYLD_LIBRARY_PATH

Ceci est une liste de répertoires séparés par des deux-points qui contiennent des bibliothèques. L'éditeur de liens dynamique recherche ces répertoires avant de rechercher les emplacements par défaut des bibliothèques. Cela vous permet de tester de nouvelles versions de bibliothèques existantes.

Pour chaque bibliothèque qu'un programme utilise, l'éditeur de liens dynamique la recherche dans chaque répertoire de DYLD_LIBRARY_PATH à tour de rôle. Si la bibliothèque n'est toujours pas trouvée, il recherche ensuite dans DYLD_FALLBACK_FRAMEWORK_PATH et DYLD_FALLBACK_LIBRARY_PATH à tour de rôle.

Utilisez l'option -L pour otool(1). pour découvrir les frameworks et bibliothèques partagées auxquels l'exécutable est lié.


Vous voudriez probablement quelque chose comme

export DYLD_LIBRARY_PATH=.:$DYLD_LIBRARY_PATH

pour ajouter . (répertoire courant) à la liste des emplacements recherchés. Sur mon OS X non modifié, DYLD_LIBRARY_PATH n'a pourtant aucune valeur actuelle:

$ echo $DYLD_LIBRARY_PATH

$

En fonction de la manière dont vous avez l'intention d'exécuter votre programme, vous devrez définir ceci différemment, par exemple dans Xcode (mais je ne sais pas où).

25voto

TVNshack Points 351

On ne devrait jamais définir export DYLD_LIBRARY_PATH sur votre système.

Les chemins des bibliothèques partagées peuvent être corrigés en utilisant otool -L et install_name_tool.

Par exemple, si vous compilez Perl DBD-MySQL, vous ne pourrez pas l'utiliser car le lien ne sait pas où vous avez installé MySQL.

># make
....

># otool -L blib/arch/auto/DBD/mysql/mysql.bundle

blib/arch/auto/DBD/mysql/mysql.bundle:
        libmysqlclient.18.dylib (version de compatibilité 18.0.0, version actuelle 18.0.0)
        /usr/lib/libSystem.B.dylib (version de compatibilité 1.0.0, version actuelle 125.2.11)

#> install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib blib/arch/auto/DBD/mysql/mysql.bundle

># otool -L blib/arch/auto/DBD/mysql/mysql.bundle

blib/arch/auto/DBD/mysql/mysql.bundle:
        /usr/local/mysql/lib/libmysqlclient.18.dylib (version de compatibilité 18.0.0, version actuelle 18.0.0)
        /usr/lib/libSystem.B.dylib (version de compatibilité 1.0.0, version actuelle 125.2.11)

#> make test
...
Résultat : PASS

#> make install

C'est aussi simple que ça.

7voto

Paul Solt Points 171

Dans Xcode 4, vous pouvez l'ajouter au schéma du projet pour éviter des erreurs comme celle-ci :

dyld: Bibliothèque non chargée : @loader_path/libLeap.dylib
  Référencé depuis : /Users/paulsolt/Library/Developer/Xcode/DerivedData/LeapTest-eqcxmzewheyjusgrcszyvlcxlgna/Build/Products/Debug/LeapTest
  Raison : image introuvable
  1. Dans le Menu, cliquez sur "Product" -> "Edit Scheme" -> onglet "Arguments" -> Ajoutez "Variables d'environnement" -> Clé : DYLD_LIBRARY_PATH Valeur : /Users/MyUserAccount/path/to/lib

  2. Changez le chemin vers votre compte utilisateur et le chemin complet vers le dossier de la bibliothèque.

  3. Vous devriez pouvoir build et run.

Setting DYLD_LIBRARY_PATH in Xcode 4

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X