WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Matlab Bibliotheken in Mac OSX

 

DarthSol
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 12.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.06.2012, 14:41     Titel: Matlab Bibliotheken in Mac OSX
  Antworten mit Zitat      
Hallo,
ich habe ein recht spezielles Problem. Ich verwende das Segmentierungstool "AMIRA" um Daten zu verarbeiten.
Das Prozedere ist (so zumindest der Plan) einen Datensatz einzulesen, ihn mit AMIRA zu bearbeiten und dann als *.mat File zu speichern. So weit, so gut.
Das Problem ist nun, dass AMIRA nicht auf die Bibliotheken von MATLAB zugreifen kann.

Der Fehler sieht wie folgt aus.

Zitat:
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.
Please fix this and restart Amira.



Ich habe mich dann auch ein bisschen schlau gemacht und in der Anleitung folgendes gefunden:

Zitat:
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).


Genau dies hab ich gemacht, und wenn ich jetzt den Befehl

Zitat:
echo $AMIRA_LD_LIBRARY_PATH


eingebe

bekomme ich als "Antwort" genau meinen Installationspfad.

/Applications/MATLAB_R2010aSV.app/bin/maci

Leider erhalte ich immer noch die Fehlermeldung, dass nicht auf die Matlab Bibliotheken zugegriffen werden kann, obwohl libmat.dylib und libeng.dylib im besagten Verzeichnis sind.

Hat jemand eine Idee, was hier falsch laufen könnte?
Private Nachricht senden Benutzer-Profile anzeigen


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 12.06.2012, 15:04     Titel:
  Antworten mit Zitat      
Ich sehe, dass die Doku auf R2008b basiert, hier aber R2010a eingesetzt wird. Vielleicht ist das generell nicht kompatibel?

Speziell gilt es zu prüfen ob das 32/64 Bit Probleme im Spiel sind.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 12.06.2012, 15:09     Titel:
  Antworten mit Zitat      
Ich sehe da gibt es schon einen Thread auf Apfeltalk Smile

Was sagt den Amira zu dem Problem? Auf deren Seite konnt ich keine MATLAB Kompatibilitätsinformationen finden.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
DarthSol
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 12.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.06.2012, 15:30     Titel:
  Antworten mit Zitat      
Also ein Kollege hat ebenfalls Matlab 2010a und bei ihm funktioniert es, allerdings verwende ich im Gegensatz zu ihm die Schülerversion.
Und ich verwende wie er die 32 Bit Variante.
Private Nachricht senden Benutzer-Profile anzeigen
 
flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.06.2012, 16:32     Titel:
  Antworten mit Zitat      
Das ist wohl ein typischer Fehler des Classloaders und die Meldung ist eigentlich eindeutig:

http://de.wikipedia.org/wiki/Progra.....iothek#Unixartige_Systeme
http://developer.apple.com/library/.....Manpages/man1/dyld.1.html

Die dynamischen Bibliotheken werden durch den Classloader nicht gefunden, Du musst entsprechend zu Deinem System die Pfade korrekt setzen. Ob 32 oder 64Bit ist bei OSX unerheblich denn sie sollten als "univeral binaries" im Marc-O ( http://en.wikipedia.org/wiki/Mach-O ) Format vorliegen

Das ist so eigentlich kein Matlab Problem sondern würde bei fehlerhafter Konfiguration unter Windows / Linux ebenso auftreten, der unterschied wäre lediglich der Text der Fehlermeldung und das Beheben, wobei sich OSX nicht groß von einem Unix / Linux unterscheidet
Private Nachricht senden Benutzer-Profile anzeigen
 
DarthSol
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 12.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.06.2012, 11:11     Titel:
  Antworten mit Zitat      
Also, ich habe jetzt LD_LIBRARY_PATH derart modifiziert das ich bei

Zitat:
echo $LD_LIBRARY_PATH


Als Antwort

Zitat:
/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

Zitat:
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.....288&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.
Private Nachricht senden Benutzer-Profile anzeigen
 
flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.06.2012, 12:00     Titel:
  Antworten mit Zitat      
DarthSol hat Folgendes geschrieben:


Zitat:
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.



genau. Prüfe einmal mit otool ( https://developer.apple.com/documen.....anpages/man1/otool.1.html ) ob richtig referenziert ist. Matlab hat gerne mit den Umgebungsvariablen Probleme (leider auch schon in eigener Erfahrung mit einem ratlosen Mathworks Supporter gesprochen). Matlab mag es leider gar nicht, wenn es die Libs nicht so findet, wie es sie gerne hätte und durch diverse Umgebungsvariablen kann man sich damit Probleme holen.

Als zusätzlich Hinweis, man kann unter OSX die Pfade ganz unix-like über z.B. /etc/profile o.ä. setzen aber OSX spezifisch geht dies über https://developer.apple.com/library.....cles/EnvironmentVars.html
wobei bitte der Hinweis oben zu beachten ist.

DarthSol hat Folgendes geschrieben:

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).


Ich kann nur für Voll-, Klassraum- und Studentenversionen sprechen, aber das sollte an sich irrelevant sein.

DarthSol hat Folgendes geschrieben:

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.


Sofern die Entwickler nicht auf speziell auf OSX prüfen gibt wird es analog zu einem BSD behandelt, was es auch ist. DYLD_LIBRARY_PATH ist eine spezielle OSX Erweiterung. Wenn Du von den Strukturen von dem dynamischen Laden von Bibliotheken und auch das Linken davon nicht viel weißt, dann würde ich dazu raten, dass Du erst einmal diese Grundlagen nach schlägst, denn "mal eben so eine Library zu bauen und richtig einzubinden" ist unter keinem OS schnell mal gemacht. Matlab ist Java basiert, arbeitet aber intern via JNI mit entsprechenden systemspezifischen Bibliotheken (Boost, Lapack, Arpack, Atlas), jede Bibliothek, die von Matlab verwendet wird, muss sich dadurch in das OS entsprechend einbinden, damit sie funktioniert.
Du solltest zunächst versuchen Deine Bibliothek OSX spezifisch zu bauen und mit Hilfe eines Testprogramms ausprobieren. Zusätzlich wäre auch zu überlegen ein OSX Framework von Deiner Bibliothek zu bauen, das würde die Pflege und das OSX spezifische Einbinden durchaus vereinfachen. Wenn Du kein Framework bauen möchtest, dann solltest Du die Bibliothek in ein eigenes Verzeichnis ablegen und eben über die Umgebungsvariablen richtig referenzieren.
Private Nachricht senden Benutzer-Profile anzeigen
 
DarthSol
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 12.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2012, 11:25     Titel:
  Antworten mit Zitat      
Allo, ich bins mal wieder, leider noch immer mit dem gleichen Problem. Ich hab jetzt erst mal recherchieren müssen wo ich das otool überhaupt herkomme, bis ich gelesen habe, dass sich die Tools dafür ja auf meiner Mac OSX Installationsdisk befinden. Very Happy

Ich bin anschließend in den Ordner

Zitat:
/Applications/MATLAB_R2010a.app/bin/maci


gegangen und habe den otool L-Befehl auf libeng.dylib und libmat.dylib angewandt.
Hier für otool -L libeng.dylib

Zitat:
@loader_path/libeng.dylib (compatibility version 0.0.0, current version 0.0.0)
@loader_path/libut.dylib (compatibility version 0.0.0, current version 0.0.0)
@loader_path/libmx.dylib (compatibility version 0.0.0, current version 0.0.0)
@loader_path/libmat.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.4.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.0.0)


Hier für otool -L libmat.dylib

Zitat:
@loader_path/libmat.dylib (compatibility version 0.0.0, current version 0.0.0)
@loader_path/libut.dylib (compatibility version 0.0.0, current version 0.0.0)
@loader_path/libmx.dylib (compatibility version 0.0.0, current version 0.0.0)
@loader_path/libhdf5_hl.6.dylib (compatibility version 7.0.0, current version 7.2.0)
@loader_path/libhdf5.6.dylib (compatibility version 7.0.0, current version 7.2.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.4.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.0.0)



Jetzt weiß ich allerdings nicht, wie ich das nun interpretieren muss, bzw. wie das auszusehen hat wenn es richtig referenziert ist.
Private Nachricht senden Benutzer-Profile anzeigen
 
flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2012, 12:00     Titel:
  Antworten mit Zitat      
Schau Dir ggf noch zusätzlich https://developer.apple.com/library.....Manpages/man1/dyld.1.html an und was die Prefixe @loader_path bedeuten.

Jetzt überlege Dir bitte einmal was diese Fehlermeldung aussagt. Noch ein Hinweis der Begriff "Symbol" kann man mit Funktion gleich setzen. Ich denke wenn Du die Meldung in eigenen Worten formulieren kannst, dann ist Dir klar was sie bedeutet.
Wie dann eine Lösung aussieht, da müssen wir uns dann stückchenweise etwas überlege. Ich kann leider zurzeit das selbst nicht auf meinem OSX & Matlab testen.
Private Nachricht senden Benutzer-Profile anzeigen
 
DarthSol
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 12.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2012, 12:53     Titel:
  Antworten mit Zitat      
Also es ist ja schonmal sicher dass er für das aufrufen der Matlab Engine die Dateien libmat.dylib und libeng.dylib benötigt. Um diese öffnen zu können benötigt er die Funktion _miFtell64 die er in /usr/local/lib/libmx.dylib erwartet, dort aber nicht findet. Das bedeutet dann wohl entweder, dass diese Funktion nicht an dem Ort ist, an dem sie hingehört, oder aber dass die Referenz falsch gesetzt ist.

Leider liefert eine Google Suche bei _miFtell64 nichts brauchbares.

Kann es vielleicht sein, dass er das falsche libmx.dylib referenziert? Es gibt ja auch ein libmx.dylib im /Applications/MATLAB_R2010.app/bin/mac/ oder, aber er sucht ja in /usr/local/lib

Edit: Zum Thema passend habe ich dies hier gefunden, was nützlich sein könnte
http://stackoverflow.com/questions/.....y-on-a-mac-with-full-path

Edit2: Der Suchbefehl grep -r _miFtell64 /Applications/MATLAB_R2010a.app/bin/maci

liefert

Zitat:
Binary file /Applications/MATLAB_R2010a.app/bin/maci/libmat.dylib matches
Binary file /Applications/MATLAB_R2010a.app/bin/maci/libmx.dylib matches


grep -r _miFtell64 /usr/local/lib

findet dagegen nichts
Private Nachricht senden Benutzer-Profile anzeigen
 
flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2012, 15:52     Titel:
  Antworten mit Zitat      
DarthSol hat Folgendes geschrieben:
Also es ist ja schonmal sicher dass er für das aufrufen der Matlab Engine die Dateien libmat.dylib und libeng.dylib benötigt. Um diese öffnen zu können benötigt er die Funktion _miFtell64 die er in /usr/local/lib/libmx.dylib erwartet, dort aber nicht findet. Das bedeutet dann wohl entweder, dass diese Funktion nicht an dem Ort ist, an dem sie hingehört, oder aber dass die Referenz falsch gesetzt ist.


Genau. Aber was einen immer etwas aufhorchen lassen sollte ist das 64 in dem Funktionsnamen, das klingt hier so, als gibt es 2 Funktionen, einmal einem mit 32 als Suffix und einmal mit 64 als Suffix. Könnte bedeuten, dass es einmal eine 64Bit und einmal eine 32Bit Variante gibt.
In Deinem Fall könnte es dann sein, dass er versucht er die 64 Bit Funktion zu linken, die aber nicht existiert, weil real eine 32 Bit Bibliothek verwendet wird, d.h. zwinge evtl mal Deinen Linker & Compiler einfach hart die passende Bit-Version zu bauen. Bei GCC geht dies über das Flag -arch. Unter OSX liefert Dir bei Matlab der Splash-Screen beim Start die Info, was real verwendet wird (die machi-Bezeichnung).

Zuletzt bearbeitet von flashpixx am 17.06.2012, 16:50, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
DarthSol
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 12.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2012, 16:49     Titel:
  Antworten mit Zitat      
Das ist irgendwie verrückt.
Ich habe es vorhin kurzfristig geschafft, dass Amira ohne Fehlermeldung eine *.mat File speichert. Leider habe ich es bisher nicht geschafft, das zu reproduzieren.
Das einzige was ich gemacht habe war den Befehl

export LD_LIBRARY_PATH=/Applications/MATLAB_R2010a.app/bin/maci
in die Konsole einzugeben und Amira vom Terminal aus zu starten und "auf einmal" gings.

Kurz darauf habe ich Amira beendet und vom Finder aus gestartet, jedoch hat es dort nicht funktioniert. Jetzt bin ich gerade dabei die Command History durchzugehen, ob ich da irgendetwas anders gemacht als sonst, bisher leider ohne Erfolg.

Das hilft erstmal nicht viel, aber zeigt auf jeden Fall dass das Speichern von *.mat Files prinzipiell funktionieren muss.

Zitat:
In Deinem Fall könnte es dann sein, dass er versucht er die 64 Bit Funktion zu laden, die aber nicht existiert, d.h. zwinge evtl mal Deinen Linker & Compiler einfach hart die 32 Bit zu bauen. Bei GCC geht dies über das Flag -arch. Evtl baust Du dann Deine Bibliothek als 32Bit Version.


Gibt es dafür vielleicht eine Anleitung? Ich habe nur mal gelesen dass es gefährlich sein kann, bestimmte Compiler Modi zu erzwingen.
Private Nachricht senden Benutzer-Profile anzeigen
 
DarthSol
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 12.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.06.2012, 10:24     Titel:
  Antworten mit Zitat      
Zitat:
Unter OSX liefert Dir bei Matlab der Splash-Screen beim Start die Info, was real verwendet wird (die machi-Bezeichnung).


Beim Start liefert der Splash-Scrren die Info 32 bit (maci)

Ich denke das Problem ist einfach dass zum öffnen von libmat.dylib und libeng.dylib die Datei libmx.dylib im /usr/lib Verzeichnis erwartet wird, dabei müsste es libmx.dylib im Matlab Installations Ordner sein, denn libmx.dylib im MATLAB Verzeichnis hat die Funktion _miFtell64.
Private Nachricht senden Benutzer-Profile anzeigen
 
DarthSol
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 12.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.06.2012, 15:53     Titel:
  Antworten mit Zitat      
Ich habe eine Lösung gefunden, aber sie wirkt recht rustikal.
Ich habe die Datei libmx.dylib in /usr/lib durch die Datei libmx.dylib aus /Applications/MATLAB_R2010a.app/bin/maci ersetzt und den restlichen Inhalt von /Applications/MATLAB_R2010a.app/bin/maci in /usr/lib kopiert.

Es scheint jetzt alles zu funktionieren, ich hoffe nur dass ich da nichts dummes angestellt habe.
Ich habe sicherheitshalber den /usr/lib Ordner vorher kopiert.
Private Nachricht senden Benutzer-Profile anzeigen
 
flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.06.2012, 20:51     Titel:
  Antworten mit Zitat      
/usr/lib sind die Systemverzeichnisse der Bibliotheken, Du hast, wenn Du kein Backup hast, die OS Bibliotheken mit denen von Matlab überschrieben, d.h. Dein System wird sicherlich an einigen Stellen Probleme bekommen.
Ich rate dringend dazu, dass Du das Backup zurück sicherst bzw. das System neu installierst.

Außerdem kann man als normaler User nicht einfach in /usr/lib irgendetwas ersetzen, dafür benötigt man Root-Rechte und das aus guten Grund!

Ich hatte Dir am Anfang des Threads einen Wikipedialink zu Bibliotheken unter unixartiegen Systemen gepostet, dort wird von den Umgebungsvariablen LD_LIBRARY_PATH, LIBRARY_PATH und bei Apple von DYLD_LIBRARY_PATH gesprochen. Durch das richtige setzen dieser Variablen, kannst Du genau das Verhalten erreichen was Du benötigst ohne Dein System zu beschädigen.

Dein System mag noch laufen, aber es kann Dir passieren, dass diverse OSX Komponenten / Programme nun Fehler beim Laden von diversen Bibliotheken produzieren und abstürzen. Zusätzlich kann dann zusätzlich ein weiteres Problem mit den OSX Frameworks auftreten, die von den Anwendungen verwendet werden, sofern hier die Bibliotheken nicht kompatibel sind.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.