web-dev-qa-db-fra.com

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

J'essaie d'installer un solveur écrit en C++ sur mon Mac (OS X), à utiliser avec le code que j'ai écrit en XCode.

La documentation du solveur dit ceci:

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

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

Je ne comprends pas vraiment ce que cela signifie. Où et de quoi ai-je besoin pour changer quoi?

J'ai fait quelques recherches sur Google, mais je n'ai rien trouvé qui soit assez simple pour un débutant comme moi! S'il y a des patients qui voudraient bien me diriger vers une ressource en ligne ou me donner les a-b-cs de comment et où définir les variables d'environnement, je vous en serais très reconnaissant.

27
Ant

C’est une variable d’environnement et, en tant que telle, elle est généralement définie dans Terminal par

export DYLD_LIBRARY_PATH=someValue

man dyld dit:

DYLD_LIBRARY_PATH

Cette liste de répertoires contenant des bibliothèques est séparée par des deux-points. L'éditeur de liens dynamique recherche ces répertoires avant de rechercher les bibliothèques par défaut dans les emplacements par défaut. Il vous permet de tester de nouvelles versions de bibliothèques existantes.

Pour chaque bibliothèque utilisée par un programme, l'éditeur de liens dynamique le recherche successivement dans chaque répertoire dans DYLD_LIBRARY_PATH. S'il ne peut toujours pas trouver la bibliothèque, il recherche ensuite 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 les bibliothèques partagées auxquels l’exécutable est lié.


Vous voudriez probablement quelque chose comme

export DYLD_LIBRARY_PATH=.:$DYLD_LIBRARY_PATH

ajouter le code . (répertoire en cours) à la liste des emplacements recherchés. DYLD_LIBRARY_PATH n'a pas de valeur actuelle sur mon OS X non modifié:

$ echo $DYLD_LIBRARY_PATH

$

Selon votre intention d’exécuter votre programme, vous devrez définir cela différemment, par exemple. dans Xcode (je ne sais pas où).

18
Daniel Beck

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 avec otool -L et install_name_tool.

Par exemple, si vous compilez Perl DBD-MySQL, vous ne pourrez pas l'utiliser car l'éditeur de liens 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 (compatibility version 18.0.0, current version 18.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 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 (compatibility version 18.0.0, current version 18.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)



#> make test
...
Result: PASS

#> make install

C'est aussi simple que ça.

21
TVNshack

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

dyld: Library not loaded: @loader_path/libLeap.dylib
  Referenced from: /Users/paulsolt/Library/Developer/Xcode/DerivedData/LeapTest-eqcxmzewheyjusgrcszyvlcxlgna/Build/Products/Debug/LeapTest
  Reason: image not found
  1. Dans le menu, cliquez sur "Produit" -> "Modifier le schéma" -> onglet "Arguments" -> Ajouter "Variables d'environnement" -> Clé: DYLD_LIBRARY_PATH Valeur:/Users/MyUserAccount/path/to/lib

  2. Modifiez le chemin d'accès à votre compte d'utilisateur et le chemin d'accès complet au dossier de la bibliothèque.

  3. Vous devriez être capable de construire et d’exécuter.

Setting DYLD_LIBRARY_PATH in Xcode 4

7
Paul Solt