Verfasst am: 28.02.2011, 12:38
Titel: Erstelle Mex File mit Linux bibs, Crosscompiling
Sehr geehrte Community,
In meinen aktuellen eigenen Projekten habe ich mich wirklich durch ein Thema gequält, was mich viel Zeit gekostet hat. Deswegen möchte ich einen kurzen Leitfaden dazu geben, wie man eigene Quelltexte in Linux erstellt und nach Windows portiert. Dies ist nur ein Weg, den man einschlagen kann, denn es gibt bestimmt noch andere.
Ich habe diesen kleinen Quelltext, der in Linux wunderbar läuft und möchte, dass er so wie er ist auf Windows zum laufen gebracht wird:
int N = mxGetN(prhs[0]), h = 0;
mexPrintf("\n\n%i\n\n",N);
fftw_complex *in, *out;
fftw_plan p;
in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);
out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);
p = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE);
Dabei müssen wir die verschiedenen bibliotheken aber ebenso unter Windows nutzbar machen. Die stdlib, math und complex.h sind gcc Standardbibliotheken. Daher braucht man den MinGW, der diese Bibliotheken ebenso enthält, um nicht sich qualvoll selber solche Libs zu schreiben oder irgendwelche Alternativen zu suchen. Angeblich sollen mit MinGW erstellte Mex Files sogar schlanker sein als Compilate anderer Compiler.
Erster Schritt: Man lädt sich die entsprechenden Source Codes runter.
Jede Linux Bibliothek hat ein Configurationscript, was aufgerufen wird um Parameter die zum Aufbauen der Bibliothek benötigt werden festzulegen und die enthaltenen Daten für das OS (in unserem Fall win32) bereitzustellen, die mit dem Befehl
. Für die Installation auf MinGW werden jedoch diese einzelnen Variablen an den configure Befehl angehängt.Diese kann man auf der fftw HP entnehmen. Mit dem Prefix am Ende des congiguration Befehls, legt man den Installationsordner fest. In diesen wechseln wir nun mit:
In diesem befinden sich nun vier verschiedene Ordner. Interessieren tun aber nur 2 und zwar der include und der bin order. Im ersten befindet sichder Header und im zweiten die entsprechende DLL. Mit normalen Anwendungen reicht das schon,für Matlab benötigen wir aber die statische Import Lib mit Dateiendung ".lib" und die .dll.
und packt die pexports binary (aus der angehangen .zip) mit rein. und zieht aus der .dll mit pexports erstmal die entsprechende .def mit der man aus der .dll die .lib erstellt:
Nun müsste sich im Ordner die .lib befinden, die wir brauchen. Dennoch sind wir nicht ganz durch. Wir laden uns als nächstes Gnumex von der sourceforge runter und entpacken ihn. Den entstandenen Ordner fügen Wir nun zu den bekannten Matlab Ordern hinzu und geben in die Matlab Konsole gnumex ein. Es müsste sich ein Fenster öffnen.
Man muss eig nix tun, als sich den Pfad zu einer entstanden mexopts.bat Datei merken, was mit strg + c gemacht wird und erstellt die mexopts.bat datei. Dieser ist die Brücke zwischen MinGW und Matlab.
Danke schonmal für die Anleitung!
Ich stecke gerade bei pexports fest, wo bekommt man den da dass richtige Binary?
Und nur zum interesse wie kann man in der MINGW Konsole Befehle per Copy&Paste einfügen?
Vll solltest die gewonnenen .dlls und die .lib vll mit anderen Kompilern nutzen. Soweit ich weiß, haben sie auch eine Schnittstellen-funktion zu anderen Kompilern. Kpf hoch, bei sowas ist man erst dann gescheitert, wenn man aufgibt.
also weitermachen und irgendwann wird es schon klappen.Probiere einfach mal ohne die mexopts aus, lass also den -f und die Angabe der.bat weg(den Pfad natürlich auch;)).
Mfg Icke
Einstellungen und Berechtigungen
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
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.