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 -;
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程序的更多相关文章

  1. [python][matlab]使用python调用matlab程序

    问题引入 在做实验的时候,需要用到python和matlab工具来进行不同的处理,比如在run神经网络的时候,需要使用pytorch框架得到网络的各个参数,在得到参数后需要使用matlab进行聚类规划 ...

  2. c++ 调用matlab程序

    以64 bit win7下的matlab 2012a(64bit)和vs2010为例:[1]   在vs2010中新建一个C++控制台工程,添加依赖项:(请根据自己的matlab安装目录更改)[2] ...

  3. eclipse调试java调用matlab程序的7.17dll找不到的问题

    经过多次查找,这个问题本来很简单,在环境变量中CLASSPATH配置C:\MATLAB\R2012a\toolbox\javabuilder\jar\win64\javabuilder.jar 特别注 ...

  4. Python的扩展接口[3] -> Matlab引擎 -> 使用 Python 调用 Matlab 程序

    Python - Matlab 目录 Python-Matlab 引擎 Python-Matlab 数组 Python-Matlab 基本操作 Python-Matlab 调用 m 文件 Matlab ...

  5. Windows中使用 Python 调用 Matlab 程序

    https://ww2.mathworks.cn/help/matlab/matlab_external/system-and-configuration-requirements.html http ...

  6. java调用python程序以及向python程序传递参数

    在做项目的时候,经常会碰到这个问题,主要程序是用java写的,有些功能使用python写的,整个项目需要把java代码和python代码进行整合,在一个项目里面运行,这就涉及到java调用python ...

  7. MATLAB调用C程序、调试和LDPC译码

    MATLAB是一个很好用的工具.利用MATLAB脚本进行科学计算也特别方便快捷.但是代码存在较多循环时,MATLAB运行速度极慢.如果不想放弃MATLAB中大量方便使用的库,又希望代码能迅速快捷的运行 ...

  8. Matlab调用C程序

    Matlab调用C程序   复制来自https://blog.csdn.net/u010839382/article/details/42463237 Matlab是矩阵语言,如果运算可以用矩阵实现, ...

  9. Matlab调用C程序 分类: Matlab c/c++ 2015-01-06 19:18 464人阅读 评论(0) 收藏

    Matlab是矩阵语言,如果运算可以用矩阵实现,其运算速度非常快.但若运算中涉及到大量循环,Matlab的速度令人难以忍受的.当必须使用for循环且找不到对应的矩阵运算来等效时,可以将耗时长的函数用C ...

随机推荐

  1. 关于heritrix安装配置时出现”必须限制口令文件读取访问权限”的解决方法

    转载:http://www.floatinglife.cn/关于heritrix安装配置时出现必须限制口令文件读取访问 最近开始写一个RSS聚合程序,需要爬虫支持,于是就整来heritrix,没想到, ...

  2. android 三种弹出框之一PopupWindow

    PopupWindow 在android的弹出框我目前了解到的是有三种:AlertDialog,PopupWindow,Activity伪弹框, AlertDialog太熟悉了,这里就不介绍了 就先看 ...

  3. springmvc中forward和redirect

    一.跳转 import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; im ...

  4. 69道java Spring面试题和答案

    http://www.jfox.info/69-dao-java-spring-mian-shi-ti-he-da-an 目录 Spring 概述 依赖注入 Spring beans Spring注解 ...

  5. java正则表达式语法详解及其使用代码实例

    原文地址 译者序(下载代码) 正则表达式善于处理文本,对匹配.搜索和替换等操作都有意想不到的作用.正因如此,正则表达式现在是作为程序员七种基本技能之一*,因此学习和使用它在工作中都能达到很高的效率. ...

  6. Linux(Centos)配置OpenSSH无密码登陆<转>

    最近在搭建Hadoop环境需要设置无密码登陆,所谓无密码登陆其实是指通过证书认证的方式登陆,使用一种被称为"公私钥"认证的方式来进行ssh登录.   " 公私钥" ...

  7. css margin的相关属性,问题及应用

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=48 引言:margin ...

  8. 分享个新浪下载图片的ProgressBar进度样式

    https://github.com/eltld/ImageLoadProgress2

  9. 使用NuGet安装EntityFramework4.2

    1.下载NuGet 有两种方式下载NuGet 第一种:在微软的档案库下载,下载地址为:http://visualstudiogallery.msdn.microsoft.com/27077b70-9d ...

  10. [AngularJS] TweenList 3D + AngularJS Animate

    AngularJS animations and TweenLite make it really easy to create cool 3d effects in your application ...