2017-08-02 4 views
1

Ich konnte nicht herausfinden, warum meine Binärdatei nicht geladen wird. Es ist eine Dylib, die von MATLAB (MEX-Datei) geladen wird, und verlinkt zu einigen Dylibs an verschiedenen Orten. MATLAB sagt mir, dass es die MEX-Datei nicht laden kann, aber ich kann nicht herausfinden, welche seiner Abhängigkeiten es nicht finden kann.MacOSX: Welche dynamischen Bibliotheken sind durch Binärdateien verbunden?

Hat jemand irgendwelche Vorschläge, wie man so etwas debuggen kann?

Unter Linux ist ldd das perfekte Tool, um dieses Problem zu beheben. Die Leute sagen immer wieder, dass otool -L das MacOS ist, das dem Linux ldd entspricht, aber das stimmt nicht. ldd sucht tatsächlich nach den Bibliotheken und sagt Ihnen, welche gefunden werden können und wo sie gefunden wurden. otool -L sagt Ihnen nur, welche Bibliotheken benötigt werden, um zu verknüpfen. Es bemüht sich nicht zu überprüfen, ob sie da sind. Sie erfahren nicht einmal, wo nach Bibliotheken gesucht wird, wenn sie @rpath verwenden.

otool -l (kleines L) gibt Ihnen einen Dump der „load-Befehle“, dort können Sie die LC_RPATH Befehle sehen, die festlegen, wo @rpath Bibliotheken gesucht werden. Aber diese konnten mir nicht erklären, welche Abhängigkeit nicht gefunden wird.

Antwort

1

Versuchen Sie diese Umgebungsvariablen vor der Ausführung von Matlab Einstellung:

export DYLD_PRINT_LIBRARIES=1 
export DYLD_PRINT_LIBRARIES_POST_LAUNCH=1 
export DYLD_PRINT_RPATHS=1 

Run man dyld für mehr Möglichkeiten.

Sie können auch die Variablen nur für die Matlab Befehl wie folgt festgelegt:

DYLD_PRINT_LIBRARIES=1 DYLD_PRINT_LIBRARIES_POST_LAUNCH=1 DYLD_PRINT_RPATHS=1 matlab 
+0

Das ist ausgezeichnet, vielen Dank! Matlab hat ein Boot-Skript, das Umgebungsvariablen nicht an die ausführbare Datei weitergibt, also habe ich diese Variablen zum Skript hinzugefügt. Ich habe auch 'DYLD_PRINT_TO_FILE' verwendet. –

Verwandte Themen