Limitations to Shared Library Support
MATLAB Supports C Library Routines
The MATLAB® shared library interface supports C library routines only. Most professionally written libraries designed to be used by multiple languages and platforms work fine. For more information, see Call Functions in C Library Loaded with loadlibrary.
Many noncommercial libraries or libraries that have only been tested from C++ have interfaces that are not usable and require modification or an interface layer. In this case, we recommend using MEX files.
Loading C++ Libraries
The shared library interface does not support C++ classes or overloaded functions elements. Use the MATLAB C++ interface instead. For more information, see Call C++ from MATLAB.
Limitations Using printf
Function
MATLAB does not display the output of the C printf
function to the command window.
Bit Fields
You can modify a bit field declaration by using type int
or an
equivalent. For example, if your library has the following declared in its header
file:
int myfunction(); struct mystructure { /* note the sum of fields bits */ unsigned field1 :4; unsigned field2 :4; };
edit the header file and replace it with:
int myfunction(); struct mystructure { /* field 8 bits wide to be manipulated in MATLAB */ /* A char is 8 bits on all supported platforms */ char allfields; };
After editing the source code, rebuild the library. It is then possible to access the data in the two fields using bit masking in MATLAB.
Enum Declarations
char
definitions for enum
are not supported.
In C, a char
constant, for example 'A'
, is
automatically converted to its numeric equivalent (65). MATLAB does not convert constants. To use this type of
enum
, edit the header file by replacing
'A'
with the number 65 (int8('A') == 65
).
For example, replace:
enum Enum1 {ValA='A',ValB='B'};
with:
enum Enum1 {ValA=65,ValB=66};
then rebuild the library.
Unions Not Supported
Unions are not supported. As a workaround, modify the source code taking out the
union
declaration and replacing it with the largest
alternative. Then, to interpret the results, write MATLAB code as needed. For example, edit the source code and replace the
following union:
struct mystruct { union { struct {char byte1,byte2;}; short word; }; };
with:
struct mystruct { short word; };
where on a little-endian based machine, byte1
is
mod(f,256)
, byte2
is
f/256
, and word=byte2*256+byte1
. After
editing the source code, rebuild the library.
Compiler Dependencies
Header files must be compatible with the supported compilers on a platform. For an up-to-date list of supported compilers, see Supported and Compatible Compilers. You cannot load external libraries with explicit dependencies on other compilers.
Limitations Using Pointers
Function Pointers
The shared library interface does not support library functions that work with function pointers.
Multilevel Pointers
Limited support for multilevel pointers and structures containing pointers.
Using inputs and outputs and structure members declared with more than two
levels of indirection is unsupported. For example, double
***outp
translated to doublePtrPtrPtr
is not
supported.
Functions with Variable Number of Input Arguments Not Supported
The shared library interface does not support library functions with variable
number of arguments, represented by an ellipsis (...
).
You can create multiple alias functions in a prototype file, one for each set of arguments used to call the function. For more information, see MATLAB Prototype Files.