Create C/C++ shared library with MATLAB Compiler

MATLAB® is a high-level language and interactive environment that enables you to perform computationally intensive tasks faster than with traditional programming languages such as C, C++, and Fortran ( Matlab have a complete function to solve mathematic problem.

We can call function code from matlab in other language (ex. C/C++). Before we create code in C/C++, we must install MCRInstaller.bin (in Linux) or MCRInstaller.exe (in Windows).  I am using Linux Ubuntu 10.10. To install this file you can type at konsole with command :

sudo MCRInstaller.bin

You can find this file at Matlab folder location. After you install this file, you must add library path from MCR file to your system path. Edit file ~/.bashrc and add this text :

export MATLABMCR=/opt/MATLAB/MATLAB_Compiler_Runtime
export MATLABLIB=/data/ProgramFiles/MatlabR2010b/bin/glnx86/:${MATLABMCR}/v714/runtime/glnx86:${MATLABMCR}/v714/sys/os/glnx86:${MATLABMCR}/v714/sys/java/jre/glnx86/jre/lib/i386/native_threads:${MATLABMCR}/v714/sys/java/jre/glnx86/jre/lib/i386/server:${MATLABMCR}/v714/sys/java/jre/glnx86/jre/lib/i386
export XAPPLRESDIR=${MATLABMCR}/v714/X11/app-defaults

#update library

Change line MATLABMCR with your MCR folder location. Log off from your system to update system library. After preparation complete, create matlab file. Example create foo.m file.

function y = foo(x)
y = x*10;

compile this code from command matlab with :

mcc -B csharedlib:libfoo foo.m

from this command, matlab will create some file output. That file ie:


Create C code, give a name foowrap.c :

/* Include the MCR header file and the library specific header file
* as generated by MATLAB Compiler */
#include "mclmcr.h"
#include "libfoo.h"
#include <time.h>
#include <stdio.h>

int main(int argc, char **argv)
	mxArray *x_ptr;
	mxArray *y_ptr=NULL;
	double *y;
	double ret;
	float input;
    size_t t1, t2;

    t1 = time(NULL);

	/* Call the MCR and library initialization functions */
	if( !mclInitializeApplication(NULL,0) )
		fprintf(stderr, "Could not initialize the application.\n");

	if (!libfooInitialize())
		fprintf(stderr,"Could not initialize the library.\n");

	sscanf(argv[1], "%f", &input);

	/* Create an mxArray to input into mlfFoo */
	x_ptr = mxCreateDoubleScalar(input);

	/* Call the implementation function */
	/* Note the second input argument should be &y_ptr instead of y_ptr*/

	/* The return value from mlfFoo is an mxArray so we must extract the data from it */
	y = mxGetPr(y_ptr);
	ret = *y;

	/* Print a double precision number*/
	printf("The output of foo is %f\n",ret);

	/* Call the library termination function */


    t2 = time(NULL);
    div_t divresult;
    divresult = div (t2-t1, 60);
    warn("Process time = %d min %d sec\n", divresult.quot, divresult.rem);
	return 0;

and create Makefile (change include and lib folder with your include and lib matlab installed location) :


INCLUDELOC=-I${MATLABDIR}extern/include/ -I./
LIBLOC=-L${MATLABDIR}runtime/glnx86/ -L./
FLAGS=-lm -lfoo -lmwmclmcrrt
	gcc foowrap.c $(INCLUDELOC) $(LIBLOC) $(FLAGS) -o foowrap

	rm foowrap

Executed code with command make. After compiling is success, add library path from at your library from konsole. Type this command :


Executed output from console with command : ./foowrap 7

This is output from this command :

./foowrap 7
The output of foo is 70.000000
foowrap: Process time = 0 min 3 sec

This is a simple example to call Matlab function from C/C++. Slower process related with matlab library initialization and destroying.

You can donwload the complete source code at here. Dont forget to read “how_to_running.txt: file.

Source :

Add a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.