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

Posted IUNI_JM

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++程序通过动态链接库调用MATLAB程序相关的知识,希望对你有一定的参考价值。

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

MATLAB编译器设置

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

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

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

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

function c = myfit(x, y, n)
  c=polyfit(x,y,n);
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 编译myfit.m

>>mcc -B cpplib:myfit myfit.m

 

2.4 生成的文件格式

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

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

3.1 设置项目平台

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

3.2 工程环境设置

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

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

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

 

 

  • 项目属性——链接器——输入:
mclmcrrt.lib
myfit.lib(这是自己生成的)

3.3 C++程序

#include<iostream>
#include<fstream>
#include"myfit.h"
#define NUM 161
using namespace std;

int main()
{
    if (!myfitInitialize())
        return -1;
    ifstream infile("data.txt");
    double x[NUM], y[NUM];
    for (int i = 0; i < NUM&&infile; i++)
    {
        infile >> x[i] >> y[i];
    }
    infile.close();
    mwArray mwx(NUM, 1, mxDOUBLE_CLASS);
    mwArray mwy(NUM, 1, mxDOUBLE_CLASS);
    mwArray mwc;
    mwArray mwn(1, 1, mxINT32_CLASS);
    mwx.SetData(x, NUM);
    mwy.SetData(y, NUM);
    int n;
    cout << "请输入多项式拟合的阶数:";
    cin >> n;
    mwn = n;
    cin.get();
    myfit(1, mwc, mwx, mwy,mwn);
    double c[4];
    mwc.GetData(c, 4);
    cout << "多项式系数为:" << mwc << endl;
    cin.get();
    myfitTerminate();
    return 0;
}

将需要的数据放入工程目录下,编译运行。 

输出结果如下:

 

     将数据文件、myfit.dll和.exe文件放在同一目录下便可脱离VC++独立运行。如果要在没有安装MATLAB的电脑里运行,需要安装MCR,MCR安装文件的位置为:[MATLAB安装目录]\\toolbox\\compiler\\deploy\\win64。

以上是关于C/C++程序通过动态链接库调用MATLAB程序的主要内容,如果未能解决你的问题,请参考以下文章

Java调用C++动态链接库dll,有详细过程。VS2015+Eclipse以及失败解决方案

如何用Qt调用matlab生成的动态库

如何使用 gcc 和 Visual Studio 的“静态链接”和“动态链接”构建 C/C++ 程序?

python调用C/C++动态库

在 Linux/OSX 上从 C 程序运行 matlab 编译的 dll 库

专业|程序|作业|项目|Code|代写|C|C++|Java|Matlab|C#|JS|留学生