Click here to Skip to main content
11,412,833 members (75,438 online)
Click here to Skip to main content

MATLAB Shared Library

, 30 Dec 2003
Rate this:
Please Sign up or sign in to vote.
Using MATLAB compiler to build a shared library (DLL) from m-File.

Sample screenshot - Matlab Shared Library

Introduction

Some times it is required that we build a shared library (DLL) from an m-file. M-files are functions that are written in Matlab editor and can be used from Matlab command prompt. In m-files, we employ Matlab built-in functions or toolbox functions to compute something. In my past articles, I showed you some ways to use Matlab engine (vis. API, C++ class or Matlab engine API) for employing Matlab built-in functions, but what about functions that we develop? How can we use them in VC? Is there any interface? This article shows you an idea to employ your own Matlab functions.

Shared Libraries

Shared libraries or DLLs are files that export some functions. We can use exported functions in any language. Here is a brief instruction to build shared libraries from Matlab m-files:

  1. Compile your m-file into a DLL (from Matlab command prompt):
    mcc -t -L C -W lib:mylib -T link:lib -h <M-file> libmmfile.mlib

    The -t option tells the Matlab compiler to translate the m-file to the target language. The -L option specifies the target language, which is chosen to be C. The -W option tells the Matlab compiler to build a wrapper for the library with the name specified by "lib:". The -T option tells the compiler what stage should be reached and for what intentions. Here we link our application together to build a shared library (DLL). Specifying libmmfile.mlib tells Matlab compiler to link against Matlab m-file math routine.

    This step will produce mylib.dll, mylib.lib and mylib.h. For debugging purposes, you can add the -g switch to produce a DLL suitable for debugging in MSVC.

    For example, I wrote my own mean function and saved it as MeanFunction.m:

    function y=MeanFunction(x)
    [m,n]=size(x);
    k=0;
    for i=1:n
        k=k+x(i);
    end
    y=k/n;

    and compiled it with mcc:

    mcc -t -L C -W lib:MeanFunctionLib -T link:lib MeanFunction.m libmmfile.mlib
  2. Create your project in VC. In your main CPP file, include your function header file and add the related library. Here I create a simple console application. Make sure to call initialization and termination routines from your code before and after of calling the m-file function.

    #include "stdafx.h"
    #include "matlab.h"
    #include "MeanFunctionLib.h"
    
    #pragma comment(lib, "libmx.lib")
    #pragma comment(lib, "libmatlb.lib")
    #pragma comment(lib, "libmat.lib")
    #pragma comment(lib, "libmmfile.lib")
    #pragma comment(lib, "MeanFunctionLib.lib")
    
    int main(int argc, char* argv[])
    {
        mxArray* result;
        mxArray* x;
        double myArray[5]={10.2, 3, 6.3, 5.4, 5.9};
        
        x=mxCreateDoubleMatrix(1, 5, mxREAL);
        memcpy(mxGetPr(x), myArray, 5 * sizeof(double));
    
        MeanFunctionLibInitialize();
    
        result=mlfMeanfunction(x);
        
        MeanFunctionLibTerminate();
    
        mlfPrintMatrix(result);
    
        mxDestroyArray(x);
        mxDestroyArray(result);
    
        return 0;
    }
  3. Build your project.

Notice that you must use Matlab C API or Matlab C++ class library to use mxArray or mwArray. For more information, refer to my articles:

Enjoy!

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

Share

About the Author

A. Riazi
CEO Misbah3Com
Iran (Islamic Republic Of) Iran (Islamic Republic Of)
I was born in Shiraz, a very beautiful famous city in Iran. I started programming when I was 12 years old with GWBASIC. Since now, I worked with various programming languages from Basic, Foxpro, C/C++, Visual Basic, Pascal to MATLAB and now Visual C++.
I graduated from Iran University of Science & Technology in Communication Eng., and now work as a system programmer for a telecommunication industry.
I wrote several programs and drivers for Synthesizers, Power Amplifiers, GPIB, GPS devices, Radio cards, Data Acqusition cards and so many related devices.
I'm author of several books like Learning C (primary and advanced), Learning Visual Basic, API application for VB, Teach Yourself Object Oriented Programming (OOP) and etc.
I'm winner of January, May, August 2003 and April 2005 best article of month competetion, my articles are:

You can see list of my articles, by clicking here


Comments and Discussions

 
Questionoutbut of callib is zero. why? Pin
aazam rafiee zade at 23-Jun-13 4:48
memberaazam rafiee zade23-Jun-13 4:48 
QuestionHow i can create a library from a group of .m files? Pin
aazam rafiee zade at 21-Jun-13 9:38
memberaazam rafiee zade21-Jun-13 9:38 
GeneralMy vote of 5 Pin
manoj kumar choubey at 26-Feb-12 20:54
membermanoj kumar choubey26-Feb-12 20:54 
Generalhaving problems with memcpy Pin
hubertus95 at 10-Jun-11 11:17
memberhubertus9510-Jun-11 11:17 
Generalproblems using shared library to convert matlab code to c/c++ code Pin
rohith.g at 16-Jun-10 3:13
memberrohith.g16-Jun-10 3:13 
Questionhow to convert m files matlab to dll c#.net? Pin
sevda20 at 13-Jun-10 3:06
membersevda2013-Jun-10 3:06 
Generalسلام آقای ریاضی Pin
Engineer mahdi at 22-Nov-09 21:46
memberEngineer mahdi22-Nov-09 21:46 
QuestionAccess violation in libmatlb.dll while enter to function in C++ Builder 6.5/ CodeGear Pin
jb_pl at 1-Feb-09 11:33
memberjb_pl1-Feb-09 11:33 
GeneralCompatability of matlab code with c# Pin
awais55 at 10-Sep-08 1:35
memberawais5510-Sep-08 1:35 
GeneralRandom Numbers Pin
killerp at 31-Mar-08 4:11
memberkillerp31-Mar-08 4:11 
Questiondo we have something like matlab framework? Pin
adnanmn at 29-Mar-08 3:14
memberadnanmn29-Mar-08 3:14 
AnswerRe: do we have something like matlab framework? Pin
adnanmn at 31-Mar-08 1:38
memberadnanmn31-Mar-08 1:38 
ok, found the solution

http://www.mathworks.com/access/helpdesk/help/toolbox/compiler/index.html?/access/helpdesk/help/toolbox/compiler/f2-972343.htm[^]

look for MCRInstaller.exe in this article

u can find MCRInstaller.exe in any computer that has Matlab installed in it
Generalmcc of Matlab 7.0 Pin
Junaid Jameel at 13-Mar-08 5:21
memberJunaid Jameel13-Mar-08 5:21 
GeneralRe: mcc of Matlab 7.0 Pin
harbujel at 28-Jul-08 0:22
memberharbujel28-Jul-08 0:22 
Generalmatlab .net builder Pin
Paul Stephen at 10-Feb-08 18:59
memberPaul Stephen10-Feb-08 18:59 
QuestionI have some problem using m files in C++ , can you help me? Pin
Vahid - Rostami at 17-Dec-07 17:16
memberVahid - Rostami17-Dec-07 17:16 
Questioncan i use matlab inbuild function .... Pin
vishal334 at 21-Jul-07 3:21
membervishal33421-Jul-07 3:21 
AnswerRe: can i use matlab inbuild function .... Pin
ElvedinHamzagic at 21-Oct-07 4:37
memberElvedinHamzagic21-Oct-07 4:37 
QuestionCalling a dll without header in matlab Pin
ahad445 at 1-Jul-07 22:32
memberahad4451-Jul-07 22:32 
GeneralMatlab dll in Borland C++ Builder 6.0 Pin
Elvedin80 at 9-Jun-07 6:59
memberElvedin809-Jun-07 6:59 
GeneralRe: Matlab dll in Borland C++ Builder 6.0 Pin
ElvedinHamzagic at 11-Jun-07 8:30
memberElvedinHamzagic11-Jun-07 8:30 
GeneralRe: Matlab dll in Borland C++ Builder 6.0 Pin
henriqueamorim at 8-Oct-07 5:19
memberhenriqueamorim8-Oct-07 5:19 
AnswerRe: Matlab dll in Borland C++ Builder 6.0 Pin
ElvedinHamzagic at 21-Oct-07 4:19
memberElvedinHamzagic21-Oct-07 4:19 
GeneralRe: Matlab dll in Borland C++ Builder 6.0 Pin
ElvedinHamzagic at 21-Oct-07 5:05
memberElvedinHamzagic21-Oct-07 5:05 
Generalmcc Compiler error Pin
kumar Shwetaketu at 21-May-07 4:54
memberkumar Shwetaketu21-May-07 4:54 
QuestionTo access a Matlab code in my C program Pin
Sindhu Krishnana E P at 10-May-07 22:25
memberSindhu Krishnana E P10-May-07 22:25 
GeneralUsing M-files within C++ code Pin
xxpatanaxx at 8-May-07 12:39
memberxxpatanaxx8-May-07 12:39 
Generalerror compile Pin
mehdiing at 5-May-07 8:56
membermehdiing5-May-07 8:56 
GeneralRe: error compile Pin
A. Riazi at 6-May-07 3:24
memberA. Riazi6-May-07 3:24 
GeneralRe: error compile Pin
kumar Shwetaketu at 20-May-07 2:57
memberkumar Shwetaketu20-May-07 2:57 
QuestionEAccess Violation with mxCreate* Pin
NowC at 4-May-07 13:31
memberNowC4-May-07 13:31 
Questioni want to import a C code in matlab what i should do Pin
faizi ji at 3-May-07 21:00
memberfaizi ji3-May-07 21:00 
AnswerRe: i want to import a C code in matlab what i should do Pin
Sindhu Krishnana E P at 10-May-07 22:07
memberSindhu Krishnana E P10-May-07 22:07 
QuestionHow ca I do the download of the MatlabSharedLib_demo.zip? Pin
giovanitonel at 24-Nov-06 1:37
membergiovanitonel24-Nov-06 1:37 
AnswerRe: How ca I do the download of the MatlabSharedLib_demo.zip? Pin
A. Riazi at 24-Nov-06 1:45
memberA. Riazi24-Nov-06 1:45 
QuestionHow to access MATLAB functions in C# Pin
Shakeel Mumtaz at 28-Oct-06 20:05
memberShakeel Mumtaz28-Oct-06 20:05 
AnswerRe: How to access MATLAB functions in C# Pin
Sindhu Krishnana E P at 10-May-07 4:09
memberSindhu Krishnana E P10-May-07 4:09 
GeneralRe: How to access MATLAB functions in C# Pin
Shakeel Mumtaz at 11-May-07 8:16
memberShakeel Mumtaz11-May-07 8:16 
QuestionRe: How to access MATLAB functions in C# Pin
kumar dhruva at 16-Jun-11 0:48
memberkumar dhruva16-Jun-11 0:48 
GeneralMCC: Compiling a Matlab function that gets integer arguments Pin
amitkagian at 16-Oct-06 7:00
memberamitkagian16-Oct-06 7:00 
QuestionCompatibility between a Matlab dll and Delphi Pin
PititeBato at 11-Oct-06 23:39
memberPititeBato11-Oct-06 23:39 
AnswerRe: Compatibility between a Matlab dll and Delphi Pin
ElvedinHamzagic at 21-Oct-07 4:52
memberElvedinHamzagic21-Oct-07 4:52 
QuestionCalling MatLab DLL from VB6 "Can't find DLL entry point..." error Pin
icesktr1 at 22-Aug-06 8:53
membericesktr122-Aug-06 8:53 
AnswerRe: Calling MatLab DLL from VB6 "Can't find DLL entry point..." error Pin
Kashif Ishaq at 13-Sep-07 21:05
memberKashif Ishaq13-Sep-07 21:05 
Generalusing dll c++ through matlab Pin
smurffeddine at 20-Jun-06 0:53
membersmurffeddine20-Jun-06 0:53 
QuestionI cant merge the DLL with the C++ Pin
schone at 24-May-06 7:17
memberschone24-May-06 7:17 
GeneralMCC!!!!!???????????????????!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Pin
lamionne at 18-Mar-06 2:56
memberlamionne18-Mar-06 2:56 
GeneralRe: MCC!!!!!???????????????????!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Pin
kumar Shwetaketu at 21-May-07 19:58
memberkumar Shwetaketu21-May-07 19:58 
Generalplease help me Pin
lamionne at 18-Mar-06 2:42
memberlamionne18-Mar-06 2:42 
Generalstudent needsc help in matlab mcc Pin
lamionne at 16-Mar-06 0:22
memberlamionne16-Mar-06 0:22 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.150427.1 | Last Updated 31 Dec 2003
Article Copyright 2003 by A. Riazi
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid