La compilación de Matlab biblioteca compartida con caja de herramientas de procesamiento de imágenes

StackOverflow https://stackoverflow.com/questions/3804585

Pregunta

Estoy intentando compilar C biblioteca compartida de Matlab. Mi código de Matlab utiliza una gran cantidad de las funciones de procesamiento de imágenes. Por lo tanto, la compilación va bien, pero cuando llamo a la DLL de mi solicitud, recibo mensajes como:

  

"función Indefinido o método 'XYZ' para argumentos de entrada de tipo doble".

He verificado mis argumentos están bien - no es un problema tipo. Por lo tanto, he intentado añadir %#function XYZ a mi archivo .m, pero eso no ayuda nada. A continuación, he intentado usar la bandera -a en mi comando de compilación:

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

pero falla al compilar con:

  de error

Depfun: 'No se puede localizar el borde como una función de la ruta de MATLAB'

He comprobado el procesamiento de imágenes son archivos en mi equipo (que se puede ejecutar todo desde MATLAB sin ningún problema) y mis puntos de ruta al directorio que los contiene.

También he intentado copiar los archivos .m caja de herramientas en mi directorio de trabajo, pero que los globos rápidamente en una gran cantidad de archivos. Y, para algunas funciones, no hay .m - sólo un .mex -. Y no he encontrado una manera de incluir un archivo .dll en mi Mex

¿Qué me falta?

¿Fue útil?

Solución

¿Usted ha intentado incluyendo el procesamiento de imágenes caja de herramientas carpeta mediante la opción -a? Por ejemplo:

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

De acuerdo con la mcc documentación , todos los archivos de esta carpeta, así como todos los archivos en todas las subcarpetas, se añaden al archivo CTF y el subárbol de carpetas se conserva en el archivo CTF.

Si no desea incluir todas las subcarpetas, puede cargar sólo los archivos en una carpeta usando un patrón de comodines:

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

Esto puede ser necesario si hay una subcarpeta que pueden tener funciones o secuencias de comandos que podrían sombra queridos en la carpeta principal. Por ejemplo, hay una función edge.m en el C:\Program Files\MATLAB\R2009a\toolbox\images\images\ carpeta principal, y hay una ja subcarpeta que contiene archivos de ayuda de idioma japonés (en Windows), uno de los cuales también se llama edge.m. Usted no quiere que esta subcarpeta que se añade al compilar, por lo que bien podría:

  1. Eliminar esa subcarpeta temporalmente, agregue la carpeta principal sin la opción de comodín (para agregar las otras subcarpetas te quiero), a continuación, poner que volver carpeta.

  2. Añadir la carpeta principal con la opción de comodín (para agregar sólo los archivos), a continuación, añadir por separado sólo las subcarpetas que desee (como @strel y private) con un comando adicional -a. Nota: estoy seguro de si la adición de subcarpetas por separado mantendrán el subárbol de carpetas del directorio padre en el archivo CTF de la misma manera como la opción # 1 haría

Si no desea incluir una larga lista de archivos que pueden no llegar a ser utilizado, en su lugar podría tratar de usar la función DEPFUN para obtener una primera lista de dependencias para su código de MATLAB. Luego de esta lista se pueden encontrar las funciones específicas de imagen Processing Toolbox sus usos código e incluir sólo aquellos al compilar. Ya que lo preguntas específicamente, este hilo grupo de noticias menciona cómo incluir un archivo .mex:

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


Nota: También hay un MathWorks informe de error me encontré (que necesita un inicio de sesión para ver) que menciona una compilación de problemas aplicaciones que utilizan algunas funciones de imagen Processing Toolbox en Windows en R2009b. Hay una solución dada en el enlace anterior. Este error se corrige a partir del R2010a.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top