Matlab - Probando función MEX

   
Vista:

Probando función MEX

Publicado por Emi (4 intervenciones) el 01/06/2016 14:01:53
Buenas tardes.

He diseñado una función de prueba llamada test_function_mex.m que básicamente hace una multiplicación de dos números (dados a y b devuelve a*a*a*b).

Esta chorradita tan sólo era para probar cómo puedo llamar a esa función desde C++, lo que por lo visto se consigue usando la librería mex.h incluida en la carpeta MATLAB. El código que estoy probando (en una aplicación de consola de Windows) es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "stdafx.h"
#include "mex.h"
#include "matrix.h"
 
 
int _tmain(int argc, _TCHAR* argv[])
{
	mxArray *Uin[2], *Uout[1];
	mwSize dims[2] = {1,1};
	Uin[0] = mxCreateDoubleScalar(4);
	Uin[1] = mxCreateDoubleScalar(6);
	mexCallMATLAB(1,&Uout[0],2,Uin,"test_function_mex");
 
	double *x = mxGetPr(mxCreateNumericArray(2,dims,mxDOUBLE_CLASS,mxREAL));
	printf("Resultado: %f\n",*x);
 
	system("pause");
 
	mxDestroyArray(Uin[0]);
	mxDestroyArray(Uin[1]);
	mxDestroyArray(Uout[0]);
 
	return 0;
}

El problema es que al compilar me devuelve el siguiente mensaje:

1>MEX_tester.obj : error LNK2019: unresolved external symbol _mxGetPr referenced in function _wmain
1>MEX_tester.obj : error LNK2019: unresolved external symbol _mxDestroyArray referenced in function _wmain
1>MEX_tester.obj : error LNK2019: unresolved external symbol _mxCreateNumericArray_730 referenced in function _wmain
1>MEX_tester.obj : error LNK2019: unresolved external symbol _mxCreateDoubleScalar referenced in function _wmain
1>MEX_tester.obj : error LNK2019: unresolved external symbol _mexPrintf referenced in function _wmain
1>MEX_tester.obj : error LNK2019: unresolved external symbol _mexCallMATLAB referenced in function _wmain
1>C:\Users\Keiro\Documents\Visual Studio 2012\Projects\MEX_tester\Debug\MEX_tester.exe : fatal error LNK1120: 6 unresolved externals

Las librerías las he incluido con comillas (") ya que las he copiado en mi directorio raíz (en el mismo en que se encuentra el fichero .cpp). También he incluido las librerías libmat.lib, libmex.lib y libmx.lib, además de matrix.h.

¿A qué se debe este error? He probado a añadir directorios en la configuración del proyecto para vincular los archivos originales, pero tampoco funciona.

¿Vosotros contáis con los ficheros .cpp que acompañan a esas librerías? Porque probablemente ese sea el fallo (y si no lo es, lo será), ya que en el fichero mex.h se encuentran las definiciones pero al hacer click derecho sobre alguna de ellas e ir a la definición, no te vincula a ningún otro archivo, con lo cual creo que no existe ningún .cpp en mi equipo que diga al compilador qué hacen esas funciones. Por cierto, no me marca ningún error en rojo antes de compilar, con lo cual intuyo que la cabecera sí la ha detectado.

Gracias! Saludos!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder