El escenario es sencillo, se posee código C/C++ que debe comunicarse con Matlab enviando matrices y efectuando procesamiento con funciones de toolkits conocidos. Una vez concluido el procesamiento, se debe recuperar los valores de las matrices resultantes.
Para ilustrar este tipo de comunicación dejamos un ejemplo simple sobre cómo se efectúa una operación básica en Matlab desde C/C++.
#include <string.h>Existen ciertas compilaciones para compilar y ejecutar el código anterior. La manera más fácil es sin duda realizarlo por la consola de Matlab:
#include <stdio.h>
#include "engine.h"
#define BUFSIZE 1024
int main(int argc, char* argv[]) {
Engine* ep;
if (!(ep = engOpen("\0"))) {
fprintf(stderr, "\nCan't start MATLAB engine\n");
return 1;
}
else {
char buffer[BUFSIZE+1];
memset(buffer, 0, sizeof(buffer));
engOutputBuffer(ep, buffer, sizeof(buffer) - 1);
engEvalString(ep, "pi^2");
printf("Evaluating: pi^2. \nResult: %s\n", buffer);
engClose(ep);
return 0;
}
}
>> mex('-v', '-f', fullfile(matlabroot,'bin','engopts.sh'),'main.cpp')
-> g++-4.0 -c -I/Applications/MATLAB_R2010a.app/extern/include[...] -DMACI64 -DMX_COMPAT_32 -O2 -DNDEBUG "main.cpp"
-> gcc-4.0 -O -Wl,-twolevel_namespace -undefined error -arch x86_64[...] -mmacosx-version-min=10.5 -o "main" main.o -L/Applications/MATLAB_R2010a.app/bin/maci64 -leng -lmx -lstdc++
>> !./mainPara realizar la compilación por línea de comando, notar el uso de la variable matlabroot. En su directorio bin se puede encontrar el comando mex y la librería de configuración engopts.sh.
Evaluating: pi^2.
Result: >>
ans =
9.8696
$ /Applications/MATLAB_R2010a.app/bin/mex -v -f /Applications/MATLAB_R2010a.app/bin/engopts.sh main.cpp -o mainSi bien la compilación no se realiza con el comando gcc sino con mex, la ejecución sólo requiere que Matlab y csh estén instalados sin cambiar la línea de comando.