• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

[10.6 Snow Leopard] Globale Umgebungsvariable erstellen?

DarthSol

Alkmene
Registriert
17.01.10
Beiträge
32
Das Problem ist jetzt sehr speziell, aber ich hoffe es hat trotzdem jemand ne Lösung bzw. eine Idee.

Ich habe ein Problem mit der Kommunikation von Matlab und dem Segmentierungstool Amira. In Amira bearbeite ich Bilder, die ich als *.mat files abspeichern möchte. Dies funktioniert jedoch nicht, da Amira nicht auf die Matlab Library zugreifen kann.

Jetzt habe ich mich im Netz schlau gemacht und habe herausgefunden, dass man wohl unter dem Ordner

~/.MacOSX eine Datei namens environment.plist anlegen muss, in der der Pfad AMIRA_LD_LIBRARY_PATH mit der Matlab Bibliothek verknüpft wird.

Nach Anleitung sähe das so aus:

<?xml version=„1.0“ encoding=„UTF-8“?>
<!DOCTYPE plist PUBLIC „-//Apple/DTD PLIST 1.0//1.0//EN“ „http://www.apple.com/DTDS/PropertyList-1.0.dtd“>
<plist version=„1.0“>
<dict>
<key>AMIRA_LD_LIBRARY_PATH</key>
<string>/Applications/MATLAB.app/bin/maci</string>
</dict>
</plist>

Und nach Neustart müsste mein Mac Book die globale Variable erkennen. Das heißt der Befehl $AMIRA_LD_LIBRARY_PATH im Terminal müsste etwas ausspucken, tuts nur leider irgendwie nicht.

Ich verwende Mac OS X 10.6.7 (Snow Leopard)
 

Rastafari

deaktivierter Benutzer
Registriert
10.03.05
Beiträge
18.150
1) Die Datei ist als "Plain Text" anzulegen, und zB schon mal ohne typografische Anführungszeichen. Pures XML.
2) Das macht man vorzugsweise nicht mit einem Editor, sondern mit einem extra dafür vorhandenen CLI-Tool.
Wirf die bestehende Datei also weg und mach lediglich folgendes:
Code:
defaults  write  \
    $HOME/.MacOSX/environment  \
    "AMIRA_LD_LIBRARY_PATH"  \
    "/Applications/MATLAB.app/bin/maci";
Und um den Inhalt der Variable zu sehen, wirst du schon ein echo $VAR benutzen müssen. Oder ganz einfach nur env.
 

DarthSol

Alkmene
Registriert
17.01.10
Beiträge
32
Danke auf jeden Fall für die Hilfe, aber leider habe ich immer noch ein Problem.
Ich konnte jetzt zwar den Pfad AMIRA_LD_LIBRARY_PATH dem Matlab Verzeichnis zuordnen, leider kann Amira immer noch nicht drauf zugreifen:

Trying to load the Matlab engine ...
Couldn't open libmat.dylib:

dlopen(libmat.dylib, 9): image not found
Couldn't open libeng.dylib:
dlopen(libeng.dylib, 9): image not found
Loading failed, unable to open the following Matlab libraries:
libmat
libeng

The required Matlab libraries need to be in your LD_LIBRARY_PATH.

Nun weiß ich allerdings nicht, wie ich der LD_LIBRARY_PATH beibringen soll dass sie auch auf das Verzeichnis /Applications/MATLAB.app/bin/maci zugreifen soll

 

DarthSol

Alkmene
Registriert
17.01.10
Beiträge
32
Das Problem ist dass LD_LIBRARY_PATH standardmäßig auf /usr/lib/ zeigt.

Wenn ich obigen Befehl für LD_LIBRARY_PATH eingebe, spuckt er folgende Fehler aus:

Couldn't open libmx.dylib:
dlopen(libmx.dylib, 9): Library not loaded: libtbb.dylib
Referenced from: /Applications/MATLAB.app/bin/maci/libmwfl.dylib
Reason: image not found
Couldn't open libmat.dylib:
dlopen(libmat.dylib, 9): Symbol not found: _miFtell64
Referenced from: /Applications/MATLAB.app/bin/maci/libmat.dylib
Expected in: /usr/lib/libmx.dylib
Couldn't open libeng.dylib:
dlopen(libeng.dylib, 9): Symbol not found: _miFtell64
Referenced from: /Applications/MATLAB.app/bin/maci/libmat.dylib
Expected in: /usr/lib/libmx.dylib
Loading failed, unable to open the following Matlab libraries:
libmx
libmat
libeng



Interessanterweise gibt es jedoch bei echo $LD_LIBRARY_PATH keine Antwort

In der AMIRA Anleitung selbst steht nur folgendes:

On Mac OS X, the AMIRA LD LIBRARY PATH environment variable should
be set to <matlab installation path>/bin/maci (for instance:
/Applications/MATLAB R2008b.app/bin/maci).
 

DarthSol

Alkmene
Registriert
17.01.10
Beiträge
32
Unsinn. Das ist standardmässig gar nicht gesetzt.


Natürlich nicht, s.o.
Und warum setzt du das jetzt nicht einfach, so wie oben? Wo zum Geier ist denn nun das Problem?

Ich habe die Variable wie oben gesetzt, d.h.


defaults write \
$HOME/.MacOSX/environment \
"LD_LIBRARY_PATH" \
"/Applications/MATLAB_R2010aSV.app/bin/maci";

Nach Neustart lässt sich die Variable jedoch nicht mit

echo $LD_LIBRARY_PATH

aufrufe, das heißt es scheint nicht auf diesem Weg zu funktionieren
 

Rastafari

deaktivierter Benutzer
Registriert
10.03.05
Beiträge
18.150
1) Läuft dein Programm?
2) Keine Frage 2.
 

DarthSol

Alkmene
Registriert
17.01.10
Beiträge
32
Leider nein, allerdings sind die Fehlermeldungen nun anders.

Trying to load the Matlab engine ...
Couldn't open libmx.dylib:
dlopen(libmx.dylib, 9): Library not loaded: libtbb.dylib
Referenced from: /Applications/MATLAB_R2010aSV.app/bin/maci/libmwfl.dylib
Reason: image not found
Couldn't open libmat.dylib:
dlopen(libmat.dylib, 9): Symbol not found: _miFtell64

Referenced from: /Applications/MATLAB_R2010aSV.app/bin/maci/libmat.dylib
Expected in: /usr/lib/libmx.dylib

Couldn't open libeng.dylib:
dlopen(libeng.dylib, 9): Symbol not found: _miFtell64
Referenced from: /Applications/MATLAB_R2010aSV.app/bin/maci/libmat.dylib
Expected in: /usr/lib/libmx.dylib
Loading failed, unable to open the following Matlab libraries:
libmx
libmat
libeng


Er kann anscheinen nicht auf die library-Datei libmx.dylib zugreifen, die sich im Ordner /usr/lib befindet.


 

Rastafari

deaktivierter Benutzer
Registriert
10.03.05
Beiträge
18.150
Ich kann dir sagen wie man Umgebungsvariablen setzen kann.
Ich kann dir aber nicht sagen was den Entwickler geritten hat, von den Anwendern sowas steinzeitliches zu verlangen, warum es dann dennoch nicht funzt und auch nicht, wie du ihm seinen Murks über die Löffel ziehen kannst.
Ich kann dir eigentlich von hier aus nur noch dazusagen, dass auf diese Weise verknüpfter Code grundsätzlich scheitert, wenn du 32- und 64-Bit Versionen miteinander koppeln willst. Alle beteiligten Programme müssen in einem Modus laufen, für den jeweils zusammen passender Code vorhanden ist. Möglicherweise hast du also mehr Glück wenn du in den Finder-Infos des Programms den Start im 32-Bit Modus erzwingst sofern die Möglichkeit besteht. Oder dir zusammen passende Versionen besorgst, falls nötig.
 

DarthSol

Alkmene
Registriert
17.01.10
Beiträge
32
Also, ich habe jetzt LD_LIBRARY_PATH derart modifiziert das ich bei

echo $LD_LIBRARY_PATH

Als Antwort

/usr/lib: /Applications/MATLAB_R2010aSV.app/bin/maci: /Applications/MATLAB_R2010aSV.app/sys/os/maci

bekomme.

Die Anzahl der Fehlermeldungen hat sich bei Amira leicht reduziert und besteht nun im Wesentlichen aus folgenden Zeilen

Couldn't open libmat.dylib:
dlopen(libmat.dylib, 9): Symbol not found: _miFtell64

Referenced from: /Applications/MATLAB_R2010aSV.app/bin/maci/libmat.dylib
Expected in: /usr/lib/libmx.dylib
Couldn't open libeng.dylib:
dlopen(libeng.dylib, 9): Symbol not found: _miFtell64

Referenced from: /Applications/MATLAB_R2010aSV.app/bin/maci/libmat.dylib
Expected in: /usr/lib/libmx.dylib


es wird offensichtlich in /usr/lib/libmx.dylib das Symbol _miFtell64 erwartet.

Ich hab dann mal recherchiert, aber nur das zu dem Symbol gefunden.

http://mathforum.org/kb/thread.jspa?threadID=2295288&messageID=7565356

Leider fehlt bei der verlinkten Fragestellung die Antwort. Allerdings ist es auffallend, dass der "Betroffene" in der verlinkten Seite auch eine Schülerversion von MATLAB verwendet (erkennbar an MATLAB_SV74).

Was ich nicht ganz verstehe ist, warum AMIRA einen LD_LIBRARY_PATH erwartet, obwohl im Mac OSX standarmäßig DYLD_LIBRARY_PATH verwendet wird, dachte ich.
Muss aber sagen dass ich zu dem Thema keine Ahnung habe, vor diesem Problem habe ich mich nie damit befasst.