C/C++程序通过动态链接库调用MATLAB程序
2024-08-22 04:44:30
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 -;
ifstream infile("data.txt");
double x[NUM], y[NUM];
for (int i = ; i < NUM&&infile; i++)
{
infile >> x[i] >> y[i];
}
infile.close();
mwArray mwx(NUM, , mxDOUBLE_CLASS);
mwArray mwy(NUM, , mxDOUBLE_CLASS);
mwArray mwc;
mwArray mwn(, , mxINT32_CLASS);
mwx.SetData(x, NUM);
mwy.SetData(y, NUM);
int n;
cout << "请输入多项式拟合的阶数:";
cin >> n;
mwn = n;
cin.get();
myfit(, mwc, mwx, mwy,mwn);
double c[];
mwc.GetData(c, );
cout << "多项式系数为:" << mwc << endl;
cin.get();
myfitTerminate();
return ;
}
将需要的数据放入工程目录下,编译运行。
输出结果如下:
将数据文件、myfit.dll和.exe文件放在同一目录下便可脱离VC++独立运行。如果要在没有安装MATLAB的电脑里运行,需要安装MCR,MCR安装文件的位置为:[MATLAB安装目录]\toolbox\compiler\deploy\win64。
最新文章
- 进程管理三大扩展工具htop
- 小甲鱼python视频第九讲(课后习题)
- Shooting Algorithm
- [BS-21] 关于OC中对象与指针的思考
- View绘制详解(五),draw方法细节详解之View的滚动/滑动问题
- PHP获取上个月、下个月、本月的日期
- struts2错误:The Struts dispatcher cannot be found.
- 2018-2019-2 《网络对抗技术》Exp0 Kali安装 Week1 20165317
- Python mysql 创建连接
- 洛谷 P3953 逛公园
- React + antd 组件离开页面以后出现Can only update a mounted or mounting component 的解决办法
- 使用dbeaver查mysql的表会导致锁表的问题
- Maven CXF wsdl2Java 给指定名空间设置包名
- const引用返回值
- laravel 5.1 使用Eloquent ORM 操作实例
- 解决EF使用context.Database.SqlQuery时NotMapped属性列为空null的问题(转载)
- mysql中递归树状结构<;转>;
- Oracle FND API&ndash;Create User
- 机器学习-特征选择 Feature Selection 研究报告
- 论坛模块_版块管理_增删改查&;实现上下移动
热门文章
- Linux下生成动态链接库是否必须使用 -fPIC 的问题[转]
- android AsyncHttpClient 开源框架的使用
- IIS网站程序无法访问oracle
- 把java文件打包成.jar (jar命令详解)
- Animated Scroll to Top
- Android Studio开发JNIproject
- C# OpenFileDialog和PictrueBox
- Errors running builder ";Integrated External Tool Builder"; on project
- 位图字体生成工具Bitmap Font Generator的使用
- 一款基于jQuery的仿百度首页滑动选项卡