matlab2015b与vs2013混合编程(二)调用动态链接库无标题笔记

  1. 编译环境设置

配置系统环境变量

在Windows环境变量中的系统变量中“Path”中新增下:

D:\matlab\bin\win64;

环境变量配置完成后要重启

matlab配置

在Matlab的command window输入:mex -setup C++

然后在输入mbuild -setup

选择mex -setup C++ -client MBUILD

 

  1. 混合编程实现

1)在matlab中创建MATLAB函数,编写matrix_add.m文件

function matrix=matrix_add(A,B)
[m1,n1]=size(A);
[m2,n2]=size(B);
if(m1~=m2||n1~=n2)
    disp('matrix dimensions must agree');
    return;
else
    matrix=A+B;
end

2)然后在matlab命令窗口执行编译命令 ,将matrix_add.m编译成C++动态链接库文件。

 mcc -W cpplib:libmatrixadd -T link:lib matrix_add.m

 

其中libmatrixadd是需要生成的各种文件的名称,matrix_add.m是matlab函数,生成动态链接库dll,编译完成后,matlab生成一些文件,其中

libmatrixadd.cpp   libmatrixadd.dll   libmatrixadd.lib    libmatrixadd.h 是我们需要用到

 

 

 

3)在vs2013中新建解决方案,添加源文件,此部分步骤略去,同样要配置属性表

首先在配置属性表之前可以把2)中生成的libmatrixadd.h文件添加到D:\matlab\extern\include    

把2)中生成的libmatrixadd.lib压缩文件添加到D:\matlab\extern\lib\win64\microsoft

把2)中生成的libmatrixadd.dll文件添加到D:\matlab\bin\win64

然后开始配置属性表

类似于其他C++库的配置,如:添加包含目录和库路径。添加库目录(自己的MATLAB安装路径中查找):D:\matlab\extern

添加库路径(自己的MATLAB安装路径中查找):D:\matlab\extern\lib\win64\microsoft

 

配置结束

开始测试

//利用matlab函数matrix_add所生成的动态链接库实现在VS中的矩阵相加
//m1和m2为相加的两个矩阵,sum为两矩阵的和
#include "libmatrixadd.h"
#include<iostream>
using namespace std;
void main()
{
     //初始化MCR
     if (!mclInitializeApplication(NULL, 0))
     {
          cout << "fail to initialize the application" <<  endl;
          exit(1);
     }
     //初始化matrixadd
     if (!libmatrixaddInitialize())
     {
          cout << "fail to initialize libmatrixadd" <<  endl;
          exit(1);
     }
     //定义矩阵
     mwArray M1(2, 2, mxDOUBLE_CLASS);
     mwArray M2(2, 2, mxDOUBLE_CLASS);
     mwArray SUM(2, 2, mxDOUBLE_CLASS);
     //给矩阵M1赋值
     double *M1_Data;
     M1_Data = new double[4];
     int i, j;
     for (i = 0; i < 4; i++)
     {
          M1_Data[i] = 1.0*i;
     }
     M1.SetData(M1_Data, 4);
     //给矩阵M2赋值
     for (i = 1; i < 3; i++)
     {
          for (j = 1; j < 3; j++)
              M2(i, j) = i + j;
     }
     //定义调用matrix_add时输出参数的个数
     short int nargout = 1;
     //调用matrix_add函数
     matrix_add(nargout, SUM, M1, M2);
     //给输出分配内存空间
     double *SUM_Data;
     SUM_Data = new double[4];
     if (SUM_Data == NULL)
     {
          cout << "Failed to allocate memory for SUM_Data"  << endl;
          exit(1);
     }
     //将mwArray类型中的数据复制为C++数据类型
     SUM.GetData(SUM_Data, 4);
     //输出结果
     cout << "sum of m1 and m2 is:" << endl;
     cout << SUM_Data[0] << ",\t" << SUM_Data[1] << endl;
     cout << SUM_Data[2] << ",\t" << SUM_Data[3] << endl;
     //释放内存
     delete[] M1_Data;
     delete[] SUM_Data;
     //终止linmatrixadd
     libmatrixaddTerminate();
     //终止mcr
     mclTerminateApplication();
}

在配置VS属性表之前如果不把matlab生成的动态链接库添加到matlab相应路径中,会出各种错

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
matlab2015bopencv2413配置vs2013win1064位-cppMake.m 本帖最后由 yz琳儿 于 2017-1-26 12:57 编辑 以下信息转自博文MATLAB与C 混合编程(依赖OPENCV),感谢作者zouxy09。在此基础上根据版本需求做了相应更改,亲测成功。下面均系个人看法,欢迎大家批评指正。 首先mex -setup,这个指令任何版本的配置都要有,目的是安装c 编译器,然后选择mex -setup C 即可。(第一次配置需要输入,以后不用) 接下来,网上一般会说mex -v,但是matlab2015b下,输入会报错                                                                          Verbose mode is on.                                                                          Error using mex。。                                                                          Not enough input arguments. 原因是在2014版本(貌似)之后matlab并没有mexopts.bat这个配置文件,取而代之的是mex_C _win64.xml文件,因此采用上述博文的配置方法。 具体为: 1.将。。(opencv的路径)\opencv\build\x64\vc12\bin 添加入环境变量path,之后需要重启机器。 (注意:vs2013对应的是vc12,如果是vs2015,需要将路径\vc12\bin修改为\vc14\bin) 2.打开matlab,更改附件中的cppMake.m       a.程序第14行 CPPFLAGS = ' -O -DNDEBUG -I.\ -IG:\software\opencv\build\include';  %%红色需要改为自己的路径       b.程序第15行 LDFLAGS = ' -LG:\software\opencv\build\x64\vc12\lib';  %%红色需要改为自己的路径 (当然,步骤1,2,如果是32为机器,x64相应改为x86。不过我没有测试) (注意:vs2013对应的是vc12,如果是vs2015,需要将路径\vc12\lib修改为\vc14\lib) 3.将附件中的 RGBtoGRAY.cpp 测试文件置于cppMake.m所在文件夹下,输入cppMake完成测试,会在文件夹下生成 RGBtoGRAY.mexw64。接着就可调用该函数,比如                                                                         img=RGBtoGRAY;                                                                         imshow); 4.之后大家可以任意编写.cpp文件(具体可参考网上的mexFunction编写),完成matlab调用 错误集锦: 1.编译.cpp成功,然并没有生成.mexw64文件。(程序第14行,也就是include的路径,引号与-o之间是有空格符的) 2.报错                                                                         Error using mex                                                                         MEX cannot find library 'argeArrayDims-LG:\software\opencv\build\x64\vc12\lib' specified with the -l option. (同上,程序第15行,也就是lib的路径,引号与-L之间是有空格符的) 3.报错                                                                        Error using mex                                                                        MEX cannot find library 'opencv_highgui2413' specified with the -l option. (同上,程序第16行,也就是lib库名称,引号与第一个-l之间是有空格符的,且相邻两个-l之间是有空格符的) 4.编译.cpp成功,生成.mexw64文件,但是调用函数时报错                                                                        invalid mex file...找不到指定模块 (确认配置方法的第一步,添加path之后,需要重启机器) 5.编译.cpp成功,生成.mexw64文件,但是调用函数时报错                                                                        can't open input file (程序第16行,也就是lib库名称,库名称结尾是2413,不是2413d)
matlab2015bopencv2413配置vs2013win1064位-RGBtoGRAY.txt 本帖最后由 yz琳儿 于 2017-1-26 12:57 编辑 以下信息转自博文MATLAB与C 混合编程(依赖OPENCV),感谢作者zouxy09。在此基础上根据版本需求做了相应更改,亲测成功。下面均系个人看法,欢迎大家批评指正。 首先mex -setup,这个指令任何版本的配置都要有,目的是安装c 编译器,然后选择mex -setup C 即可。(第一次配置需要输入,以后不用) 接下来,网上一般会说mex -v,但是matlab2015b下,输入会报错                                                                          Verbose mode is on.                                                                          Error using mex。。                                                                          Not enough input arguments. 原因是在2014版本(貌似)之后matlab并没有mexopts.bat这个配置文件,取而代之的是mex_C _win64.xml文件,因此采用上述博文的配置方法。 具体为: 1.将。。(opencv的路径)\opencv\build\x64\vc12\bin 添加入环境变量path,之后需要重启机器。 (注意:vs2013对应的是vc12,如果是vs2015,需要将路径\vc12\bin修改为\vc14\bin) 2.打开matlab,更改附件中的cppMake.m       a.程序第14行 CPPFLAGS = ' -O -DNDEBUG -I.\ -IG:\software\opencv\build\include';  %%红色需要改为自己的路径       b.程序第15行 LDFLAGS = ' -LG:\software\opencv\build\x64\vc12\lib';  %%红色需要改为自己的路径 (当然,步骤1,2,如果是32为机器,x64相应改为x86。不过我没有测试) (注意:vs2013对应的是vc12,如果是vs2015,需要将路径\vc12\lib修改为\vc14\lib) 3.将附件中的 RGBtoGRAY.cpp 测试文件置于cppMake.m所在文件夹下,输入cppMake完成测试,会在文件夹下生成 RGBtoGRAY.mexw64。接着就可调用该函数,比如                                                                         img=RGBtoGRAY;                                                                         imshow); 4.之后大家可以任意编写.cpp文件(具体可参考网上的mexFunction编写),完成matlab调用 错误集锦: 1.编译.cpp成功,然并没有生成.mexw64文件。(程序第14行,也就是include的路径,引号与-o之间是有空格符的) 2.报错                                                                         Error using mex                                                                         MEX cannot find library 'argeArrayDims-LG:\software\opencv\build\x64\vc12\lib' specified with the -l option. (同上,程序第15行,也就是lib的路径,引号与-L之间是有空格符的) 3.报错                                                                        Error using mex                                                                        MEX cannot find library 'opencv_highgui2413' specified with the -l option. (同上,程序第16行,也就是lib库名称,引号与第一个-l之间是有空格符的,且相邻两个-l之间是有空格符的) 4.编译.cpp成功,生成.mexw64文件,但是调用函数时报错                                                                        invalid mex file...找不到指定模块 (确认配置方法的第一步,添加path之后,需要重启机器) 5.编译.cpp成功,生成.mexw64文件,但是调用函数时报错                                                                        can't open input file (程序第16行,也就是lib库名称,库名称结尾是2413,不是2413d)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值