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

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

MATLAB编译器设置

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

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

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

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

function C=Add(A,B)
  C=A+B;
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 生成的文件格式

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

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

3.1 设置项目平台

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

3.2 工程环境设置

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

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

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

  • 项目属性——链接器——输入:
libeng.lib
libmat.lib
libmex.lib
libmx.lib
mclmcrrt.lib
mclmcr.lib
libAdd.lib(最后这一个是Add.m生成的)

3.3 C++程序

#include <iostream>
#include "libAdd.h"
using namespace std;

int main()
{
    if (!libAddInitialize())
        return -1;
    double a[4] = { 1,2,3,4 };
    double b[4] = { 1,1,1,1 };
    double c[4];
    mwArray mwA(2, 2, mxDOUBLE_CLASS);
    mwArray mwB(2, 2, mxDOUBLE_CLASS);
    mwArray mwC(2, 2, mxDOUBLE_CLASS);
    mwA.SetData(a, 4);
    mwB.SetData(b, 4);
    Add(1, mwC, mwA, mwB);
    mwC.GetData(c, 4);
    cout << "mwC=\n" << mwC << endl;
    cout << "c=" << endl;
    for (int i=0;i<4;i++)
    {
        if (i%2==0)
        {
            cout<<endl;
        }
        cout<<‘\t‘<<c[i];
    }
    cout<<endl;
    libAddTerminate();
    return 0;
}

输出结果:

时间: 2024-11-10 00:58:56

C/C++程序通过动态链接库调用MATLAB程序的相关文章

Windows、Linux、Web安装及调用Matlab程序完整说明(大章)

本文档详细说明了Linux下Web项目调用Matlab函数的完整操作,文章适合对Java.Linux有一定基础了解的人群(不了解也没什么,无非是多试几次).因Linux作为服务器,所以未在其上安装Matlab主程序,只安装了运行环境MCR. 本文档内所述的所有版本软件均以32位为准,JDK与MCR也使用32位.若你的系统为64位,Linux系统同样为64位,则请尽量选择使用64位版本的JDK与MCR. 由于Matlab的版本限制问题,请保证Matlab主程序和MATLABCompiler Run

Web(jsp,html)调用Matlab程序

本环节需要准备JDK和JAVA编译器以及部署项目服务器,本节使用Eclipse和Tomcat. 1.  创建web工程,工程中需要引入javabuild.jar和Matlab函数的JAR包,直接放到lib里 2.  下面进行对Matlab函数Math.jar进行调用,分2种方式,本文仅作简单测试,并不搭建web框架进行传地址. 3.  使用JSP测试调用sum2.jar中封装对象,测试函数输出结果. A 创建jsp页面,在jsp页面头部文件引用包 <%@ page language="ja

安装及调用Matlab程序可能存在的问题解决办法

无法执行本地调用Matlab函数JAR包,容易出现的问题 a检查你的环境变量Path: %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; F:\Program Files\MATLAB\MATLAB Compiler Runtime\v717\runtime\win32; F:\Program Files\MATLAB\R2012a\runtime\win32;F:\ProgramFiles\MATLAB\R2012a\bin; 这是2个程序,需要都配置环境变量. b M

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

问题引入 在做实验的时候,需要用到python和matlab工具来进行不同的处理,比如在run神经网络的时候,需要使用pytorch框架得到网络的各个参数,在得到参数后需要使用matlab进行聚类规划.之前的做法是用python脚本耦合其联系,两者通信的方式是通过文件.后来发现matlab有针对于python的api引擎,瞬间感觉打开了新世界的大门,只需要在python中调用相关的api,就可以完成matlab的工作,再也不用一个一个复制文件了. 解决思路 首先,我安装的是matlab R201

Python的扩展接口[3] -&gt; Matlab引擎 -&gt; 使用 Python 调用 Matlab 程序

Python - Matlab 目录 Python-Matlab 引擎 Python-Matlab 数组 Python-Matlab 基本操作 Python-Matlab 调用 m 文件 Matlab的官方文档中介绍了Matlab与其余编程语言之间的引擎接口,其中包括对于Python开放的引擎API,可参考官方教程,其中包括引擎安装,基本使用,以及Python与Matlab之间的数据类型转换及交互. 除了使用官网的Matlab引擎来驱动Matlab外,还可以使用第三方包mlab来进行连接或直接使

Windows中使用 Python 调用 Matlab 程序

环境变量: 1 Python-Matlab引擎 / Pyhton-Matlab Engine 首先,需要确保Matlab及Python的配置和安装,利用Matlab提供的setup.py文件安装Python的引擎包,安装步骤及过程如下, 1. 确保安装可用的Python和Matlab,且两者版本对应,如32位的Matlab需对应32位的Python,同时还需查看Matlab支持的Python版本(目前2016a版支持的Python版本为2.7/…/3.5); 2. 添加Python目录到环境变量

Matlab调用C程序

Matlab是矩阵语言,如果运算可以用矩阵实现,其运算速度非常快.但若运算中涉及到大量循环,Matlab的速度令人难以忍受的.当必须使用for循环且找不到对应的矩阵运算来等效时,可以将耗时长的函数用C语言实现,并编译成Mex文件,Matlab便可以像调用内建函数一样调用C编写的函数.Mex文件其实是一种动态链接库,旧版本Matlab可以直接调用.dll,新版本要调用.mexw32或.mexw64文件. 编译过程需要C语言编译器,在Matlab中键入mex –setup进行安装与配置. MEX文件

c程序中调用matlab

c程序调用matlab 方法一: 在c程序中调用matlab引擎(相当于打开一个精简版matlab然后往里输入命令,即客户机/服务器模式, c程序为客户机,matlab作为本地服务器) 方法二:将m文件打包成dll文件,然后在c语言环境下调用 优缺点分析: 方法一,易于实现,可以实时监控程序的运行,但独立性差,速度慢,需要安装完整版matlab,且每次调用都会启动matlab.exe进程: 方法二,实现复杂,调试麻烦,但只需要安装mcr(matlab component runtime),耗费资

matlab 程序发布

将matlab程序发布为可执行程序包 说明,这种可执行程序包可以在没有安装matlab的计算机上运行. 1. 打开Applicaiton Compler 如果下拉列表中没有这个APPLICATIONDEPLOYMENT的话,可能是没有安装此组件.请通过添加Addons的方式,或者利用Matlab的安装程序安装. 在matlab 命令窗口中可以输入 deploytool 打开Application Compiler窗口. 2. 添加相关文件,并给出描述. 在打开的Application Compi