ubuntu c/c++中调用matlab函数

来源:互联网 发布:数据大魔王txt下载 编辑:程序博客网 时间:2024/06/09 13:10

    最近实验室一位伊拉克博士仁兄在写paper,要做仿真。需要在c++中调用matlab里面的函数。据说matlab已经有了动态链接库供调用,但是从网上百度google了下,暂时也没有找到比较详细的教程,就打算自己编译matlab某个函数的动态库。具体流程如下,以调用matlab中sin函数为例。


ubuntu12.04下的matlab安装请参照:

http://bbs.weiphone.com/read-htm-tid-6280022.html

1.编写mySin.m

function z = mySin(x) z = sin(x); end

2.编译libMySin.so

       在matlab中打开mySin.m文件所在的路径,然后在matlab命令行中输入如下命令:

mcc -W cpplib:libMySin -T link:lib mySin -C

       其中libMySin指的是生成的动态链接库的名字,mySin是matlab文件名。

3.编写cpp文件调用mySin,文件名为MainSin.cpp,和mySin.m在同一路径下

#include "mclmcrrt.h"#include "mclmcr.h"#include "mclcppclass.h"#include "matrix.h"#include <iostream>#include "libMySin.h"int main(void)   {       double a = 1.57;         double b;       // initialize lib,这里必须做初始化!       if(!libMySinInitialize())       {       std::cout << "Could not initialize libMySin!" << std::endl;       return -1;       }       // 为变量分配内存空间,可以查帮助mwArray       mwArray mwA(1, 1, mxDOUBLE_CLASS); // 1,1表示矩阵的大小(所有maltab只有一种变量,就是矩阵,为了和Cpp变量接轨,设置成1*1的矩阵,mxDOUBLE_CLASS表示变量的精度)       mwArray mwB(1, 1, mxDOUBLE_CLASS);           mwA.SetData(&a, 1);          // using mySin,调用我们自己写的函数       mySin(1, mwB, mwA);       // get data    b = mwB.Get(1, 1);       printf("sin %f is %f\n",a, b);       // 后面是一些终止调用的程序       // terminate the lib       libMySinTerminate();       // terminate MCR       mclTerminateApplication();       return 0;   }  

4.编写Makefile

LIBPATH = -L/home/zk/matlab_test/mySin -L/usr/local/MATLAB/R2013b/runtime/glnxa64 -lmwmclmcrrt -lMySinINCLUDEPATH = -I/usr/local/MATLAB/R2013b/extern/include/LD_LIBRARY_PATH = /home/zk/matlab_test/mySin:/usr/local/MATLAB/R2013b/runtime/glnxa64:$LD_LIBRARY_PATHexport LD_LIBRARY_PATHMainSin.o:MainSin.cppg++ -c MainSin.cpp $(INCLUDEPATH)MainSinApp:MainSin.og++ -o MainSinApp MainSin.o $(LIBPATH)./MainSinAppMainAppclean:rm -f *.o

LIBPATH 中:
/home/zk/matlab_test/mySi
是我mySin.m文件所在的路径,编译的libMySin.so动态库所在的位置

/usr/local/MATLAB/R2013b/runtime/glnxa64
是我电脑中matlab安装的路径,matlab动态库所在的位置


INCLUDEPATH也是matlab安装的路径,matlab头文件所在的位置。

5.在终端执行make命令就可以看到结果啦

make MainSinApp




0 0
原创粉丝点击