C/C++程序通过动态链接库调用MATLAB程序
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。
C/C++程序通过动态链接库调用MATLAB程序的更多相关文章
- [python][matlab]使用python调用matlab程序
问题引入 在做实验的时候,需要用到python和matlab工具来进行不同的处理,比如在run神经网络的时候,需要使用pytorch框架得到网络的各个参数,在得到参数后需要使用matlab进行聚类规划 ...
- c++ 调用matlab程序
以64 bit win7下的matlab 2012a(64bit)和vs2010为例:[1] 在vs2010中新建一个C++控制台工程,添加依赖项:(请根据自己的matlab安装目录更改)[2] ...
- eclipse调试java调用matlab程序的7.17dll找不到的问题
经过多次查找,这个问题本来很简单,在环境变量中CLASSPATH配置C:\MATLAB\R2012a\toolbox\javabuilder\jar\win64\javabuilder.jar 特别注 ...
- Python的扩展接口[3] -> Matlab引擎 -> 使用 Python 调用 Matlab 程序
Python - Matlab 目录 Python-Matlab 引擎 Python-Matlab 数组 Python-Matlab 基本操作 Python-Matlab 调用 m 文件 Matlab ...
- Windows中使用 Python 调用 Matlab 程序
https://ww2.mathworks.cn/help/matlab/matlab_external/system-and-configuration-requirements.html http ...
- java调用python程序以及向python程序传递参数
在做项目的时候,经常会碰到这个问题,主要程序是用java写的,有些功能使用python写的,整个项目需要把java代码和python代码进行整合,在一个项目里面运行,这就涉及到java调用python ...
- MATLAB调用C程序、调试和LDPC译码
MATLAB是一个很好用的工具.利用MATLAB脚本进行科学计算也特别方便快捷.但是代码存在较多循环时,MATLAB运行速度极慢.如果不想放弃MATLAB中大量方便使用的库,又希望代码能迅速快捷的运行 ...
- Matlab调用C程序
Matlab调用C程序 复制来自https://blog.csdn.net/u010839382/article/details/42463237 Matlab是矩阵语言,如果运算可以用矩阵实现, ...
- Matlab调用C程序 分类: Matlab c/c++ 2015-01-06 19:18 464人阅读 评论(0) 收藏
Matlab是矩阵语言,如果运算可以用矩阵实现,其运算速度非常快.但若运算中涉及到大量循环,Matlab的速度令人难以忍受的.当必须使用for循环且找不到对应的矩阵运算来等效时,可以将耗时长的函数用C ...
随机推荐
- Vehicle’s communication protocol
http://www.crecorder.com/techInfo/commuProtocols.jsp COMMUNICATION PROTOCOLS A “communication protoc ...
- App Submission Issues
查看原文: http://leancodingnow.com/app-submission-issues/ I bet many iOS developers are busy submitting ...
- 如何修改meclipse中的默认浏览器
window------->preferrences------------>general-------------->web browser---------->选择你要使 ...
- SharedObject.getLocal("application-name")
package { import flash.display.Sprite; import flash.events.MouseEvent; import flash.events.NetStatus ...
- Flexigrid在IE下不显示数据的处理
文章总结自我的论坛提问: http://bbs.csdn.net/topics/390498434?page=1#post-394918028 解决方法: 网上的答案经我验证都是不靠谱的,以后大家就知 ...
- wp8 在OnBackKeyPress事件中调用MessageBox.Show()崩溃
今天写代码的时候遇到一个问题,在wp8中执行下面的代码后,弹出对话框后,停滞一段时间程序退出. protected override void OnBackKeyPress(CancelEventAr ...
- hdu 4739 Zhuge Liang's Mines 随机化
Zhuge Liang's Mines Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.p ...
- eclipse内存溢出报错:java.lang.OutOfMemoryError:Java heap space
今天执行了一个比較大的程序,处理的数据达到126MB数据,将数据导入数据库中,用eclipse 来訪问时候,总是出现java.lang.OutOfMemoryError:Java heap space ...
- PHP中header用法详解带范例(转)
header的用法 header()函数的作用是:发送一个原始 HTTP 标头[Http Header]到客户端.标头 (header) 是服务器以 HTTP 协义传 HTML 资料到浏览器前所送出的 ...
- 在Linux最大打开文件数限制下 MySQL 对参数的调整
http://www.actionsky.com/docs/archives/78 2016年4月7日 周文雅 目录 1 起因 2 说明 3 MySQL调整参数的方式 3.1 计算 request ...