Question

Je suis en train de compiler C bibliothèque partagée de Matlab. Mon code Matlab utilise beaucoup de la fonctionnalité de traitement d'image. Alors, va bien compilation, mais quand je l'appelle la dll de ma demande, je reçois des messages comme:

  

"Fonction non définie ou méthode 'XYZ' pour arguments d'entrée de type double".

J'ai vérifié mes arguments sont ok - c'est pas un problème de type. Donc, j'ai essayé d'ajouter %#function XYZ à mon dossier .m, mais cela n'a pas aidé quoi que ce soit. Ensuite, j'ai essayé d'utiliser le drapeau -a dans ma commande compilation:

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

mais il ne parvient pas à compiler avec:

  

erreur de Depfun: « Impossible de localiser le bord en fonction de la voie MATLAB »

J'ai vérifié les fichiers de traitement de l'image sont sur mon ordinateur (je peux courir tout de Matlab sans problème) et mes points de chemin vers le répertoire qui les contient.

J'ai aussi essayé de copier la boîte à outils fichiers .m dans mon répertoire de travail, mais que les ballons rapidement dans un grand nombre de fichiers. Et, pour certaines fonctions, il n'y a pas .m - juste un .mex -. Et je n'ai pas trouvé un moyen d'inclure un fichier dans mon .dll MEX

Qu'est-ce que je suis absent?

Était-ce utile?

La solution

Avez-vous essayé, y compris le dossier Image Processing Toolbox en utilisant l'option -a? Par exemple:

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

Selon le de mcc , tous les fichiers dans ce dossier, ainsi que tous les fichiers dans tous les sous-dossiers sont ajoutés aux archives du FCT, et la sous-arborescence du dossier est conservé dans les archives du FCT.

Si vous ne voulez pas inclure tous les sous-dossiers, vous pouvez charger uniquement les fichiers dans un dossier en utilisant un modèle générique:

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

Cela peut être nécessaire s'il y a un sous-dossier qui peut avoir des fonctions ou des scripts qui pourraient shadow ceux dans le dossier parent. Par exemple, il y a une fonction edge.m dans le dossier parent C:\Program Files\MATLAB\R2009a\toolbox\images\images\, et il y a un de sous-dossier ja que contient des fichiers d'aide en langue japonaise (sous Windows), l'un qui est aussi appelé edge.m. Vous ne voudriez pas que ce sous-dossier à ajouter lors de la compilation, de sorte que vous pouvez soit:

  1. Supprimer le sous-répertoire temporaire, ajoutez le dossier parent sans l'option générique (pour ajouter les autres sous-dossiers que vous ne voulez), puis mettre ce dossier en arrière.

  2. Ajoutez le dossier parent avec l'option générique (pour ajouter uniquement les fichiers), puis ajouter séparément seulement les sous-dossiers que vous voulez (tels que @strel et private) avec une commande -a supplémentaire. NOTE: Je suis certain que l'ajout des sous-dossiers séparément maintiendront la sous-arborescence du dossier du répertoire parent dans l'archive du FCT de la même manière que l'option 1 serait

  3. !

Si vous ne voulez pas inclure une grande liste des fichiers qui ne peuvent pas finir par être utilisé, vous pourriez plutôt essayer d'utiliser la fonction DEPFUN d'abord obtenir une liste des dépendances pour votre code Matlab. Ensuite, à partir de cette liste, vous pouvez trouver le traitement spécifique de l'image fonctions Toolbox votre code utilise et comprennent seulement ceux lors de la compilation. Depuis que vous avez demandé spécifiquement, ce fil de newsgroup mentionne comment inclure un fichier .mex:

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


Remarque: Il y a aussi un rapport MathWorks bug je suis tombé sur (que vous avez besoin d'une connexion pour voir) qui mentionne un problème de compilation des applications utilisant des fonctions de traitement d'image Toolbox sous Windows en version 2009b. Il existe une solution donnée au lien ci-dessus. Ce bug est corrigé au R2010a.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top