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

mit mex C-code compilieren

 

Matlab_Anfänger!
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 06.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.01.2011, 10:38     Titel: mit mex C-code compilieren
  Antworten mit Zitat      
Hallo Zusammen,

ich möchte vorhandene C-codes in matlab verwenden! Das heißt ich möchte diese mit Hilfe von mex compilieren.
Leider klappt das bei mir nicht. Ich glaube bei mir passen die Verlinkungen nicht. Wo muss ich denn welche Pfade eingeben? Nur in der "makefile"? muss ich dann den pfad zum workspace angeben (ordner in denen die c-dateien sind) oder eine Verbindung zu "...matlab/bin/win32"?
Muss man in den .h-Dateien auch noch etwas ändern?

hier mal noch meine Fehlermeldungen:

Code:

>> mex -f msvc90engmatopts.bat 'weight.c'
LINK : fatal error LNK1561: Einstiegspunkt muss definiert werden.
 
  C:\PROGRAMME\MATLAB71\BIN\MEX.PL: Error: Link of 'weight.exe' failed.
 
??? Error using ==> mex
Unable to complete successfully
 


Code:

>> mex vector3.c
Specified export _mexFunction is not defined
Missing exports. Aborting
 
  C:\PROGRAMME\MATLAB71\BIN\MEX.PL: Error: Link of 'vector3.mexw32' failed.
 
??? Error using ==> mex
Unable to complete successfully
 



ich wäre euch sehr dankbar wenn Ihr mir helfen könntet.

VIELEN DANK!!!
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: 06.01.2011, 19:07     Titel: Re: mit mex C-code compilieren
  Antworten mit Zitat      
Hallo Matlab_Anfänger,

Der C-Code kann nicht einfach direkt von Matlab aufgerufen werden. Du benötigst noch den "Einstigspunkt", wie die Fehlermeldung ja auch feststellen.

Schaue Dir doch mal die Dokumentation zu den Mex-Files an:
help mex -> Building Mexfiles
Dort findest Du den Header der mexFunction.

Zitat:
Ich glaube bei mir passen die Verlinkungen nicht.

Was meinst Du mit "Verlinkung"?
Zitat:
Wo muss ich denn welche Pfade eingeben? Nur in der "makefile"?

Welches "makefile"?
Zitat:
Muss ich dann den pfad zum workspace angeben (ordner in denen die c-dateien sind) oder eine Verbindung zu "...matlab/bin/win32"?

Der Ausdruck "workspace" ist in Matlab anders definiert.

Zitat:
Muss man in den .h-Dateien auch noch etwas ändern?
Ja, Du brauchst unbedingt "mex.h".

Was genau möchtest Du kompilieren. Von wo möchtest Du auf Deinen Funktionen zugreifen? Hast Du die Beispiele angeschaut und kompiliert?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Matlab_Anfänger!
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 06.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.01.2011, 22:43     Titel:
  Antworten mit Zitat      
Hallo Jan,

Vielen vielen Dank für deine Antwort.
Ich habe es versucht nach den Schritten zu machen. Aber leider steige ich ab Punkt 5 vollkommen aus.
Ich weiß nicht was das soll "to the library modules in the LINK settings option.".
Crying or Very sad
Das ist das was ich mit "Verlinkung" gemeint habe..

Schritt 6 Verstehe ich auch nicht. Wo soll "Settings C/C++ Preprocessor option." sein???

Bei Schritt 7 und 8 bin ich dann endgültig weg.

Mein Problem ist glaub ich dass ich in C noch nie etwas gemacht habe. Die Codes stammen auch nicht von mir, aber ich muss mit denen weiter arbeiten.. Deshalb bin ich wohl mit der ganzen Situation überfordert. Confused

In meinen Codes werden Funktionen,Matrizen,..generiert. In Zukunft möchte ich aber alles in Matlab programmieren, also muss ich die Daten irgendwie übertragen, sodass ich die Matrizen von Matlab aus aufrufen kann.

Ich wäre extrem dankbar, wenn ihr mir weiter helfen könntet..

Danke.
Lg Susanne
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: 06.01.2011, 23:15     Titel:
  Antworten mit Zitat      
Hallo Matlab_Anfänger,

Zitat:
Ich habe es versucht nach den Schritten zu machen.

Welche Schritte genau meinst Du?

Eigentlich braucht man nicht viel Gedöns um ein C-Mex zu kompilieren:
Code:
mex -setup  % (scheinst Du bereits geschaft zu haben)
mex -O function.c  % mit dem entsprechenden Namen

Und dieses C-File muss als Gateway die Funktion "mexFunction" enthalten, wie Du sie in den Beispielen findest, etwa:
matlabroot\extern\examples\mexFunction.c

Zitat:
In meinen Codes werden Funktionen,Matrizen,..generiert. In Zukunft möchte ich aber alles in Matlab programmieren, also muss ich die Daten irgendwie übertragen, sodass ich die Matrizen von Matlab aus aufrufen kann.

Wäre es dann nicht leichter, die Matrizen aus dem C-Code heraus in ein File zu schreiben und das File in Matlab wieder einzulesen?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Matlab_Anfänger!
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 06.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.01.2011, 10:23     Titel:
  Antworten mit Zitat      
Hallo Jan,

die Set-up geschichte habe ich gemacht. Das war auch kein Problem.
Aber bei mex -O vector3.c
bekomme ich immer eine Fehlermeldung:
Code:

>> mex -O vector3.c
 
  C:\PROGRAMME\MATLAB71\BIN\MEX.PL: Error: 'vector3.c' not found.
 
??? Error using ==> mex
Unable to complete successfully
 


was meinst du mit:
'Und dieses C-File muss als Gateway die Funktion "mexFunction" enthalten, wie Du sie in den Beispielen findest, etwa:
matlabroot\extern\examples\mexFunction.c'
in welchen Beispielen kann ich das sehen? Sorry dass ich es noch nicht verstehe..

--------------------------------------
Ich habe versucht die Schritte aus "Compiling MEX-Files with the Microsoft Visual C++ IDE" zu verfolgen. (unter matlab help -> custom building MEX-Files) Dort gibt es 8 Punkte, nur leider konnte ich nicht alle machen!Sad
Ich hab in den letzten Tagen soo viel ausprobiert. Ich finde immer wieder was neues, das wird dann alles ausprobiert. aber wirklich verstehen tue ich das nicht was ich da immer mache..
--------------------------------------

Das ist nachher nicht nur eine Datei die ich brauche. Ich hab ca 30 C-Dateien und jede Datei enthält einen Code von ca 200-300 Zeilen. Dahinter steckt ein sehr komplexes Problem, welches ich nicht einfach in matlab umschreiben kann. (sonst hätte ich das schon längst gemacht, wenn man bedenkt wie viel zeit mich das jetzt schon kostet..)


Vielen Dank!

Lg Susanne
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.01.2011, 00:19     Titel:
  Antworten mit Zitat      
Hallo Susanne,

Zitat:
Aber bei mex -O vector3.c
bekomme ich immer eine Fehlermeldung:
Code:

>> mex -O vector3.c
  C:\PROGRAMME\MATLAB71\BIN\MEX.PL: Error: 'vector3.c' not found.

Die Meldung bedeutet, dass das File "vector.c" nicht im aktuellen Ordner liegt. Per CD solltest Du also einfach ins richtige Verzeichneis wechseln.

Zitat:
was meinst du mit:
'Und dieses C-File muss als Gateway die Funktion "mexFunction" enthalten, wie Du sie in den Beispielen findest, etwa:
matlabroot\extern\examples\mexFunction.c'
in welchen Beispielen kann ich das sehen?

"matlabroot\extern\examples\mex\mexFunction.c" ist das Beispiel-File (sorry - ich hatte ein "\mex\" vergessen)!
"matlabroot" ist der Basis-Ordner von Matlab (einfach mal "matlabroot" im Command-Window eingeben).
Schau Dir mal dieses File an um zu sehen, wie genau Matlab eine kompilierte Mex-Funktion aufruft.

[qute]Sorry dass ich es noch nicht verstehe..[/quote]
Lass Dich nur nicht entmutigen. Ich habe auch über mehrere Monate immer mal wieder versucht dahinter zu kommen, wie man ein Mex-File kompiliert. Dass es im Endeffekt trivial ist, macht den Lernprozess wie immer im Leben nicht schneller.

Als Strategie schlage ich vor, alle C-files in extern\examples\mex\ mal anzuschauen. Die "mexFunction" ist das Interface, dass Matlab-Arrays als Input und Output verwendet. Von dort läßt sich der normale C-Code aufrufen, der dann C-Arrays als Daten benutzt. Die "mexFunction" ist also die Funktion, zu der Matlab beim Aufruf eines kompilierten Mex-Files springt. Ganz so, wie das Betriebssystem zur Funktion "main()" springt.

Gruß, Jan
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.