Skip to Main Content Skip to Search
Accelerating the pace of engineering and science

How can I interface MATLAB code with C, C++, or FORTRAN?


Date Last Modified: Wednesday, February 22, 2012
Solution ID:   1-GQC9NF
Product:   MATLAB
Reported in Release:   R2011b
Platform:   All Platforms
Operating System:   All OS
 

Subject:

How can I interface MATLAB code with C, C++, or FORTRAN?

Problem Description:

I would like to develop certain parts of my code in C, C++, or FORTRAN and others in MATLAB.

How do I develop an application that uses a combination of MATLAB with the three programming languages?

Solution:

Section 1: Calling C, C++, or FORTRAN code from MATLAB.
One can call your existing C, C++, or FORTRAN programs from MATLAB by creating MEX-files.

What is a MEX file?
MEX is a built-in utility that enables you to call C, C++, or FORTRAN code in MATLAB by compiling your code into a MATLAB Executable called a MEX-file. MEX-files are dynamically linked subroutines that are called as regular MATLAB functions. This requires you to replace your application's main() with a special gateway function - called "mexFunction" - to pass inputs and outputs to and from MATLAB. MEX is discussed in the MATLAB External Interfaces Guide. For in-depth examples and other detailed MEX information, see the MEX-files Guide, Technical Note 1605. To use MEX, you do not need additional MathWorks products; all you need is MATLAB and a supported C, C++, or FORTRAN compiler. On 32-bit Windows, a supported C compiler (LCC) is distributed with MATLAB. See the Supported and Compatible Compiler list for a complete list of supported C compilers. For example, to compile foo.c into a MEX function, use the following syntax:
mex foo.c
The documentation has several examples of C and C++ MEX-files and FORTRAN MEX-files.

Section 2: Calling MATLAB from C, C++, or FORTRAN stand-alone programs.
The MATLAB Engine allows C, C++, or FORTRAN programs to communicate with a separate MATLAB process via pipes in UNIX and through ActiveX on Windows. For more information on the MATLAB Engine, see using the MATLAB Engine.

Section 3: Converting my MATLAB code into a C or C++ shared library.
You can convert MATLAB code into a C or C++ shared library using the MATLAB Compiler. This shared library can then be incorporated into a Visual Studio project, or be combined with a driver file into a stand-alone application. To compile your MATLAB code, for example foo1.m and foo2.m, into a C shared library use the following syntax:
mcc -B csharedlib:libmyfoo foo1.m foo2.m
For an example on building a C shared library and a driver file, refer to the C shared library example of the documentation. It is further possible to integrate these shared libraries into Visual Studio applications.

Section 4: Knowing when one would need to buy MATLAB Compiler and when one would need only MATLAB.
If one has C, C++, or FORTRAN code and wants to
(a) generate MEX-files to execute C, C++, or FORTRAN code in MATLAB, or
(b) link to a MATLAB session in order to execute MATLAB code in C, C++, or FORTRAN in a stand-alone program
you need MATLAB and a supported C, C++, or FORTRAN compiler to compile the source code.

If you have C or C++ code as well as MATLAB code and you want to
(a) create a C or C++ shared library to integrate into an existing application and custom MATLAB code, or
(b) create a COM/ .NET object from MATLAB code using MATLAB Builder for .NET to integrate with an existing Visual Studio application, or
(c) create an Excel plug-in from MATLAB code using MATLAB Builder for Excel to integrate with an existing Excel project
you need MATLAB, MATLAB Compiler, and a supported C, C++, or FORTRAN compiler to compile the source code.

The following link will provide a list of supported C, C++, or FORTRAN compiler to compile the source code.
http://www.mathworks.com/support/compilers/R2011b/win32.html

Please provide feedback to help us improve this Solution
Contact support