How to Call Matlab Functions from C++

百般思念 提交于 2019-11-28 22:54:19

问题


I want to call MATLAB function in my C++ project.

I'm using Matlab R2010a and Visual Studio 2010

First I created a simple matlab function:

function y = foo(x)
    y = x+1;

and then I used matlab compiler to compile this function using matlab GUI compiler (File-> new -> Deployment Project and then choose C++ shared Library). It produces this files 2 folders: distrib and src.

distrib contains:

  1. foo.dll
  2. foo.h
  3. foo.lib

src contains :

  1. foo.cpp
  2. foo.dll
  3. foo.exp
  4. foo.exports
  5. foo.h
  6. foo.lib
  7. foo_mcc_component_data.c

I want to use this file in a C++ application. I tried many times and I didn't find a way. All the ways I found over the internet are using old matlab compiler which produces different files or works on an old version of visual studio.

So please could anyone help me?

What must I do? What files/references must I add and to where? What paths must I define?


回答1:


maybe it is too late but for the future.

Include foo.h.

Add C/C++-General-Additional Include Directories the way to the matlab headers (C:\Program Files (x86)\MATLAB\R2009b\extern\include).

Add foo.lib, mclmcrrt.lib and mclcommain.lib for Linker in Additional Dependencies.

For linker in Additional Library Directories show the way to your matlab libs(C:\Program Files (x86)\MATLAB\R2009b\extern\lib\win32\microsoft for 32bit ver (matlab and VS versions should be the same. I had to install the second Matlab 32bit version.)).

I added the way to the foo.lib in my system path.

Before using your library foo.dll, you should initialize MCR and library function.

mclInitializeApplication(NULL,0);
fooInitialize(); 

After using don't forget:

mclTerminateApplication();
fooTerminate();

And some demonstration code, looks like:

int num = 1;
double numbrIn = 1.5;
std::cout<<"now we have " << numbrIn << std::endl;
mwArray array_in(num, 1, mxDOUBLE_CLASS, mxREAL);
array_in.SetData(&numbrIn,num);
mwArray array_out;
foo(1, array_out, array_in);
array_out.GetData(&numbrIn, num);
std::cout<<"now we have " << numbrIn << std::endl;



回答2:


The files foo.h and foo.lib will be required to compile your application. The foo.dll file will need to be shipped with your resulting application, usually in the same directory.

If you put the foo.h file in the same directory as your source files, you won't need to do anything special to #include "foo.h". You can also add the direct path to foo.lib in the external linker dependencies.

If you want to store these files outside of your project folder and/or re-use these files in other applications, you can read up on VC++ Directories, Projects and Solutions.

Edit: You probably also need to add the MATLAB libraries to your include and library paths. Check out the MathWorks support solution Why do I receive the error 'Could not find include file "mclmcrrt.h"' when trying to compile a stand-alone application?



来源:https://stackoverflow.com/questions/6429243/how-to-call-matlab-functions-from-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!