Frage

Ich versuche, gemeinsam genutzte C-Bibliothek von Matlab zu kompilieren. Mein Matlab-Code verwendet eine Menge der Bildverarbeitungsfunktionalität. Also, Kompilieren geht in Ordnung, aber wenn ich die DLL-Datei von meiner Anwendung aufrufen, erhalte ich Meldungen wie:

  

„Undefiniert Funktion oder Methode‚XYZ‘für Eingangsargumente vom Typ double“.

Ich habe meine Argumente sind ok überprüft - es ist nicht eine Art Problem. Also habe ich versucht, %#function XYZ meine .m-Datei hinzufügen, aber das hat nicht geholfen nichts. Dann habe ich versucht, die -a Flagge in meinem Kompilierung Befehl:

eval(['mcc -v -N -W lib:cshared -d ' clibdir ' -T link:lib -a edge' allFiles]); 

aber es funktioniert nicht mit kompilieren:

  

Depfun Fehler: ‚Kann nicht Kante als eine Funktion auf dem MATLAB-Pfad lokalisieren‘

ich die Bildverarbeitung überprüft habe, Dateien auf meinem Computer (ich alles von Matlab ohne Probleme ausgeführt werden kann) und meinen Pfad auf das Verzeichnis, das sie enthält.

Ich habe auch versucht die Toolbox .m-Dateien in meinem Arbeitsverzeichnis kopiert wird, sondern dass schnell Ballons in eine Menge von Dateien. Und für einige Funktionen gibt es keine .m - nur ein .mex -. Und ich gefunden habe, keinen Weg, um eine mex-Datei in meine DLL einschließen

Was bin ich?

War es hilfreich?

Lösung

Haben Sie versucht, einschließlich der Image Processing Toolbox Ordner, um die -a Option? Zum Beispiel:

mcc ... -a C:\Program Files\MATLAB\R2009a\toolbox\images\images

Nach dem mcc Dokumentation , werden alle Dateien in diesem Ordner, sowie alle Dateien in allen Unterordner, werden das CTF-Archiv hinzugefügt, und die Ordner Unterstruktur im CTF-Archiv aufbewahrt.

Wenn Sie nicht möchten nicht jeden Unterordner enthalten, können Sie nur die Dateien in einem Ordner laden ein Platzhalter-Muster mit:

mcc ... -a C:\Program Files\MATLAB\R2009a\toolbox\images\images\*

Dies kann notwendig sein, wenn es ein Unterordner ist, die Funktionen oder Skripte haben, die diejenigen in den übergeordneten Ordner Schatten könnte. Zum Beispiel gibt es eine edge.m Funktion in den übergeordneten Ordner C:\Program Files\MATLAB\R2009a\toolbox\images\images\, und es gibt einen ja Unterordner, enthält japanische Sprache Hilfedateien (unter Windows) , von denen auch edge.m genannt wird. Sie würden diese Unterordner hinzugefügt werden nicht wollen beim Kompilieren, so können Sie entweder:

  1. Entfernen Sie diese Unterordner vorübergehend, fügen Sie den übergeordneten Ordner ohne die Wildcard-Option (auf die anderen Unterordner hinzufügen Sie wollen), dann den Ordner zurück setzen.

  2. In den übergeordneten Ordner mit der Wildcard-Option (fügen Sie einfach die Dateien), dann separat hinzufügen nur die Unterordner Sie (wie @strel und private) wollen mit einem zusätzlichen -a Befehl. Hinweis: Ich bin nicht sicher, ob das Hinzufügen Unterordner separat den Ordner Unterstruktur des übergeordneten Verzeichnisses im CTF-Archiv in der gleichen Weise wie die Option 1 würde beibehalten

Wenn Sie nicht über eine große Liste von Dateien enthalten sein sollen, die verwendet wird, kann nicht am Ende wird, könnten Sie stattdessen versuchen, die Funktion mit DEPFUN zunächst eine Liste von Abhängigkeiten für MATLAB-Code erhalten. Dann aus dieser Liste können Sie die spezifische Bildverarbeitung Toolbox-Funktionen Code verwendet und sind nur diejenigen, finden beim Kompilieren. Da Sie ausdrücklich darum gebeten, dieser Newsgroup-Thread erwähnt, wie eine .mex Datei enthalten sein:

mcc ... -a imreconstructmex.mexw32  %# For a 32-bit Windows mex file


Hinweis: Es gibt auch eine MathWorks Bugreport Ich stieß auf (die Sie benötigen eine Login zu sehen), die ein Problem der Zusammenstellung von Anwendungen unter Verwendung einiger Image Processing Toolbox-Funktionen unter Windows in R2009b erwähnt. Es gibt eine Abhilfe bei dem oben angegebenen Link. Dieser Fehler ist behoben ab R2010a.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top