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

externe lib bei mex einbinden

 

Cherup
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 29.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.04.2013, 12:40     Titel: externe lib bei mex einbinden
  Antworten mit Zitat      
Hallo mal wieder,

ich hänge leider immernoch an dem Problem eine externe Library einzubinden. Daher habe ich das ganze nochmal von vorne angefangen.
Kurz die Aufgaben/Problembeschreibung:

Ich möchte ein netzwerkbasiertes Interface (in C++ geschrieben) über eine mex-Schnittstelle aus meinem Matlab-Code ansprechen.
Für dieses Interface muss ich einige externe Header-Dateien und eine Library einbinden bzw. linken.

Nun meine bisherige "Lösung":
Ich habe im C++ Code natürlich die entsprechenden Header-Dateien eingebunden.
Mein Mex-Befehl zum compilieren sieht so aus:
mex -I"[Ordner mit den externen Header-Dateien]" -L"[Ordner mit der Library], [MexDateiname], -l[externe lib]

Das kompilieren klappt, aber sobald ich das Programm starten will, sagt mir Matlab, dass das entsprechende Modul nicht gefunden wurde. Nach ein bischen googeln hab ich dann herausgefunden, dass wohl die dll der Library nicht (richtig) gelinkt wurde.
Ich habe dann mal alle externen Codes auskommentiert und siehe da es klappt. Danach habe ich probiert, den entsprechenden Namespace des Interface einzubinden und ab da gehts nicht mehr. Daher wird es wohl daran liegen, dass die lib/dll nicht richtig gelinkt wurde.

Habe ich irgendetwas übersehen? Muss ich noch irgendwo Pfad-Variablen eintragen (System, Matlab)?

Ich hoffe ihr könnt mir weiterhelfen, bin mit meinem Latein am Ende.

Viele Grüße
Cherup
_________________

Linux is like a Wigwam: no Windows, no Gates and an Apache inside
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.04.2013, 09:16     Titel: Re: externe lib bei mex einbinden
  Antworten mit Zitat      
Hallo Cherup,

Wenn es sich um dynamische Libraries handelt, müssen sie auch zur Laufzeit gefunden werden. Dazu müssen sie entweder im gleichen Ordner liegen oder der Ordner muss im Pfad des Betriebssystems enthalten sein.

Im der Beschreibung des MEX-Befehls ist eine ungerade Nummer an Double-Quotes enthalten. Das mag ein Tippfehler sein. Es wäre aber bestimmt sinnvoller, nicht mit Pseudo-code zu beschreiben, was Du vorhast, sondern eine Kopie des echten Befehls zu posten. Denn genau hier könnte ja der Fehler liegen!

Mit welchen Betriebssystem arbeitest Du?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Cherup
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 29.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.04.2013, 13:06     Titel:
  Antworten mit Zitat      
Hi,

Danke für die Antwort. Das mit den Quotes ist ein Tippfehler, da hast du Recht.
Ich arbeite mit Win 7. Den Ordner mit der lib habe ich in der System-Path Variablen eingetragen, aber es funktioniert leider immernoch nicht. Vielleicht habe ich dabei auch einen Fehler gemacht, werd ich gleich mal checken.
Falls ich die DLL kopiere enstehen noch mehr Fehler durch nicht aufgelöste Abhängigkeiten, aber vllt kann ich die noch auflösen. Zur Erklärung: Bei dem Interface handelt es sich um eine HLA (High Level Architecture)-Schnittstelle, also komplett externen Code.
Und das ganze muss halt auf etlichen Rechnern eingesetzt werden, daher wäre es natürlich optimal, wenn ich das ganze nicht durch kopieren sonder durch relative Pfade linken könnte. Naja zumindest will ich das erstmal grundlegend zum laufen bekommen.

Muss ich die lib / den Pfad noch bei Matlab eintragen bzw. laden? Ich bin gerade auf den LoadLibrary-Befehl gestoßen, allerdings braucht man dafür eine Header-Datei und die ist nicht vorhanden oder ich habe sie nicht gefunden...
Falls es weiterhilft, kann ich Teile des Codes hier posten, möglicherweise habe ich einen Befehl vergessen. Es ist das erste mal das ich bei Matlab mit libs arbeite und ich habe da 0 Erfahrung...

VG
Cherup
_________________

Linux is like a Wigwam: no Windows, no Gates and an Apache inside
Private Nachricht senden Benutzer-Profile anzeigen
 
Cherup
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 29.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.04.2013, 13:32     Titel:
  Antworten mit Zitat      
Ok,

also ein fetter Fehler meinerseits:
Ich habe den Dependency Walker falsch benutzt Embarassed
Laut diesem wird die erforderliche dll korrekt eingebunden, aber ein paar andere nicht, z.B. JVM.dll für Java usw... Jetzt werde ich erstmal versuchen, diese korrekt einzubinden. Falls es dann immernoch Probleme gibt, werde ich das hier Posten, also bitte noch nicht auf beantwortet setzen...

Gott, ist das ärgerlich und peinlich. Ihr glaubt gar nicht wie viele Stunden ich mich schon damit rumquäle Confused

VG
Cherup
_________________

Linux is like a Wigwam: no Windows, no Gates and an Apache inside
Private Nachricht senden Benutzer-Profile anzeigen
 
Cherup
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 29.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.04.2013, 13:54     Titel:
  Antworten mit Zitat      
Soooo,

anscheinend läuft es jetzt (abgesehen von etlichen Problemen, die mit meinem Kot bzw. meiner Programmierfähigkeit zusammenhängen Wink

Kurz zusammengefasst war es folgendes Problem:
Ich musste den Ordner in die System-Path-Variable eintragen (war auch geschehen).
Es musste der Matlab-Java-Ordner bei Matlab eingetragen werden.
Und zu guter letzt: man sollte auch mit der richtigen Architektur arbeiten. 32bit und 64bit gemischt ist nicht gerade ein Vorteil... (Beide Matlab-Versionen laufen auf dem Rechner)...

Also alles in allem fast nur Blödheit meinerseits Laughing

Viele Grüße und vielen Dank für die Hilfe

Cherup
_________________

Linux is like a Wigwam: no Windows, no Gates and an Apache inside
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



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