C/C++程序通过动态链接库调用Matlab程序

MATLAB编译器设置

需要设定对应的C++编译器才能编译.m文件生成可供C++调用的库文件。

在MATLAB命令行输入:mex –setup;然后继续输入:mbuild –setup,选择已安装的VC编译器。

将MATLAB程序编译成C/C++动态链接库

假设存在一个Add.m的文件需要编译成库文件:

function C=Add(A,B)
  C=A+B;
end

2.1 将MATLAB程序编译成C动态链接库

采用mcc编译选项:

>>mcc –W lib:libname file.m –T link:lib

采用捆绑命令文件:

>>mcc –B csharedlib:libname file.m

2.2 将MATLAB程序编译成C++动态链接库

采用mcc编译选项:

>>mcc –W cpplib:libname file.m –T link:lib

采用捆绑命令文件:

>>mcc –B cpplib:libname file.m

2.3 生成的文件格式

成功编译会在Add.m的路径下生成一些文件:

C/C++程序通过动态链接库调用Matlab程序

3 创建C/C++程序调用MATLAB函数

3.1 设置项目平台

根据MATLAB的位数(32或64),设置相应的项目平台。

C/C++程序通过动态链接库调用Matlab程序

3.2 工程环境设置

将前面生成的libAdd.dll、libAdd.h和libAdd.lib三个文件拷贝到新建的C++工程中,并设置工程属性。

  • 项目属性——VC++目录——包含目录:

C/C++程序通过动态链接库调用Matlab程序

  • 项目属性——VC++目录——库目录:

 C/C++程序通过动态链接库调用Matlab程序

 

  • 项目属性——链接器——输入:
libeng.lib
libmat.lib
libmex.lib
libmx.lib
mclmcrrt.lib
mclmcr.lib
libAdd.lib(最后这一个是Add.m生成的)

C/C++程序通过动态链接库调用Matlab程序

3.3 C++程序

#include <iostream>
#include "libAdd.h"
using namespace std;

int main()
{
    if (!libAddInitialize())
        return -1;
    double a[4] = { 1,2,3,4 };
    double b[4] = { 1,1,1,1 };
    double c[4];
    mwArray mwA(2, 2, mxDOUBLE_CLASS);
    mwArray mwB(2, 2, mxDOUBLE_CLASS);
    mwArray mwC(2, 2, mxDOUBLE_CLASS);
    mwA.SetData(a, 4);
    mwB.SetData(b, 4);
    Add(1, mwC, mwA, mwB);
    mwC.GetData(c, 4);
    cout << "mwC=\n" << mwC << endl;
    cout << "c=" << endl;
    for (int i=0;i<4;i++)
    {
        if (i%2==0)
        {
            cout<<endl;
        }
        cout<<'\t'<<c[i];
    }
    cout<<endl;
    libAddTerminate();
    return 0;
}

 输出结果:

 C/C++程序通过动态链接库调用Matlab程序

相关推荐