C/C++程序通过动态链接库调用MATLAB程序
2016-06-11 13:34
567 查看
C/C++程序通过动态链接库调用MATLAB程序
1 MATLAB编译器设置
需要设定对应的C++编译器才能编译.m文件生成可供C++调用的库文件。在MATLAB命令行输入:mex –setup;然后继续输入:mbuild –setup,选择已安装的VC编译器。
2 将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。
相关文章推荐
- Matlab mex -setup 找不到编译器
- matlab fig文件的操作
- 摄像机标定
- 有用的Matlab、C、C++、Python和LaTeX代码以及数据集
- 图像检索:颜色聚合向量(CCV)及matlab实现
- Matlab find函数用法,全面解析
- Matlab 设置默认工作路径
- Matlab中图片保存的5种方法
- matlab改变GUI和figure左上角图标的方法,并生成exe文件
- Matlab画图,去掉周围白边
- 自己编写的 matlab 线性索引转换下标 函数
- 【matlab/C++】MATLAB直接生成Java&C/C++代码
- [Matlab] MxArray 与 MwArray 使用区别
- 关于matlab鼠标响应
- [mac]matlab for mac ---关于无法读取avi文件的解决方法
- matlab练习程序(粒子群优化PSO)
- OpenCV和Matlab 通过XML传递数据
- matlab中的sort函数
- matlab学习笔记(1)
- matlab 可视化 —— axis