it-swarm.com.de

Wo lege ich DYLD_LIBRARY_PATH unter Mac OS X fest? Ist dies eine gute Idee?

Ich versuche, einen in C++ geschriebenen Solver auf meinem Mac (OS X) zur Verwendung mit Code zu installieren, den ich in XCode geschrieben habe.

In der Solver-Dokumentation heißt es:

Stellen Sie sicher, dass Sie "." in deinem DYLD_LIBRARY_PATH um

  • führen Sie die fertig erstellten ausführbaren Dateien aus
  • verknüpfung mit der libamg.dylib (und den gfortran RTSlibs)

Ich verstehe nicht wirklich, was das bedeutet. Wo und was muss ich ändern, was?

Ich habe ein bisschen gegoogelt, bin aber auf nichts gestoßen, was für einen Neuling wie mich einfach genug ist! Wenn es geduldige Leute gibt, denen es nichts ausmacht, mich zu einer Online-Ressource zu leiten oder mir die Grundlagen zum Festlegen von Umgebungsvariablen zu geben, wäre ich sehr dankbar.

27
Ant

Es ist eine Umgebungsvariable und wird daher normalerweise in Terminal von festgelegt

export DYLD_LIBRARY_PATH=someValue

man dyld sagt:

DYLD_LIBRARY_PATH

Dies ist eine durch Doppelpunkte getrennte Liste von Verzeichnissen, die Bibliotheken enthalten. Der dynamische Linker durchsucht diese Verzeichnisse, bevor er die Standardspeicherorte nach Bibliotheken durchsucht. Hier können Sie neue Versionen vorhandener Bibliotheken testen.

Für jede Bibliothek, die ein Programm verwendet, sucht der Dynamic Linker nacheinander in jedem Verzeichnis in DYLD_LIBRARY_PATH. Wenn die Bibliothek immer noch nicht gefunden wird, werden nacheinander DYLD_FALLBACK_FRAMEWORK_PATH und DYLD_FALLBACK_LIBRARY_PATH durchsucht.

Verwenden Sie die Option -L, um otool(1) zu verwenden. um die Frameworks und gemeinsam genutzten Bibliotheken zu ermitteln, mit denen die ausführbare Datei verknüpft ist.


Du würdest wahrscheinlich so etwas wollen

export DYLD_LIBRARY_PATH=.:$DYLD_LIBRARY_PATH

. (aktuelles Verzeichnis) der Liste der gesuchten Orte voranstellen. In meinem unveränderten OS X hat DYLD_LIBRARY_PATH jedoch keinen aktuellen Wert:

$ echo $DYLD_LIBRARY_PATH

$

Abhängig davon, wie Sie Ihr Programm ausführen möchten, müssen Sie dies anders einstellen, z. in Xcode (ich weiß aber nicht wo).

18
Daniel Beck

Man sollte niemals export DYLD_LIBRARY_PATH auf Ihrem System einstellen.

Freigegebene Bibliothekspfade können mit otool -L und install_name_tool festgelegt werden.

Wenn Sie beispielsweise Perl DBD-MySQL kompilieren, können Sie es nicht verwenden, da der Linker nicht weiß, wo Sie MySQL installiert haben.

># 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

Das ist so einfach.

21
TVNshack

In Xcode 4 können Sie es zum Projektschema hinzufügen, um Fehler wie diesen zu vermeiden:

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. Klicken Sie im Menü auf "Produkt" -> "Schema bearbeiten" -> Registerkarte "Argumente" -> "Umgebungsvariablen" hinzufügen -> Schlüssel: DYLD_LIBRARY_PATH Wert:/Users/MyUserAccount/path/to/lib

  2. Ändern Sie den Pfad zu Ihrem Benutzerkonto und den vollständigen Pfad zum Bibliotheksordner.

  3. Sie sollten in der Lage sein, zu erstellen und auszuführen.

Setting DYLD_LIBRARY_PATH in Xcode 4

7
Paul Solt