Je suis en train de compiler c une bibliothèque partagée à partir de matlab. mon code matlab utilise beaucoup de fonctionnalités de traitement d'image. Donc, la compilation se passe bien, mais quand j'appelle la DLL de mon application, je reçois des messages comme, "Fonction non définie ou méthode 'XYZ' pour les arguments d'entrée de type double". J'ai vérifié que mes arguments sont corrects - ce n'est pas un problème de type. Donc, j'ai essayé d'ajouter% # fonction XYZ à mon fichier .m, mais cela n'a rien arrangé. Ensuite, j'ai essayé d'utiliser l'indicateur -a dans ma commande de compilation:Compilation de la bibliothèque partagée Matlab avec la boîte à outils de traitement d'image
eval (['mcc -v -N -W lib: cshared -d' clibdir '-T lien: lib -a bord' allFiles]);
mais il ne parvient pas à compiler avec:
erreur Depfun: « Impossible de trouver le bord en fonction sur le chemin Matlab »
J'ai vérifié les fichiers de traitement de l'image sont sur mon ordinateur (je peux courir tout depuis matlab sans problème), et mon chemin pointe vers le répertoire qui les contient.
J'ai également essayé de copier les fichiers de la boîte à outils .m dans mon répertoire de travail, mais cela gonfle rapidement dans beaucoup de fichiers. et, pour certaines fonctions, il n'y a pas de .m - juste un .mex - et je n'ai pas trouvé un moyen d'inclure un fichier mex dans mon fichier .dll.
Que manque-t-il?
merci pour la réponse ... je pense que je suis plus proche maintenant. cependant, maintenant je reçois une erreur d'exécution, "essayez d'exécuter le script en tant que fonction: c: \ ... \ edge.m". Je devine parce que le bord est ombragé (il a un .m et un .mex). Y at-il un moyen de dire à mcc de résoudre correctement les fonctions ombrées? Je devine que Edge n'est pas le seul qui va avoir ce problème. – mike
btw, j'utilise 2008B. – mike
@mike: Dans ma version de MATLAB (R2009a), je peux voir une fonction "edge.m" dans le dossier "C: \ Program Files \ MATLAB \ R2009a \ boîte à outils \ images \ images". Il y a aussi trois dossiers: "@strel", "ja" et "private". Je n'ai pas trouvé de fichier .mex pour "edge". Le seul dossier dans lequel je trouve un autre fichier nommé "edge" est le dossier "ja", qui a un autre "edge.m" qui semble n'être rien d'autre que des commentaires. Je vais mettre à jour ma réponse rapidement avec un moyen potentiel de contourner cela. – gnovice