C++与Matlab混编,调用生成的动态链接库
2018-03-30 00:30
507 查看
转载:http://www.zyh1690.org/c-calling-matlab-generated-dynamic-link-library/
平台
VS2010 SP1MATLAB R2014a (64-bit)Win8.1 x64注意:因为需要用到mcc编译器,所以事先先用!mcc命令查看一下你的mcc编译器是否可用,部分未完全破解的Matlab是不可用的,截止今日(2015/4/10),至少R2014b还是不可用的。我的这个Matlab版本的下载地址:http://yunpan.cn/cV3jhWpvDkKuB 访问密码 629b
Matlab上的相关操作
1.编写.m文件
首先新建一个简单的Matlab程序,1234 | function [c] = add(a,b)c = a+b;return;end |
2.设置Matlab编译器
在Matlab命令行窗口输入命令:mex -setup
如图,选择VC2010编译器。接着输入
mbuild -setup命令,同样选择VC2010。
3.编译.m文件
在命令行窗口输入命令mcc -W cpplib:add -T link:lib add前面的 add 是编译产生的文件名,后一个 add 指要编译的.m文件。
导出目录生成以下文件:
但我们需要使用的只是其中的 add.dll,add.lib,add.h 三个文件。
在VS2010上使用生成的动态链接库
1.配置VS2010
新建一个win32控制台应用程序(空项目),添加 MatlabAdd.cpp 文件,右键工程属性(或者快捷键 Alt+F7),C/C++ -> 常规 -> 附加包含目录:1 | "D:\Program Files\MATLAB\R2014a\extern\include"; |
12 | "D:\Program Files\MATLAB\R2014a\extern\lib\win64\microsoft";"D:\Project\CPlusPlus\MatlabAdd\MatlabAdd\Debug" |
1 | mclmcrrt.lib;mclmcr.lib;add.lib |
1234567891011121314151617181920212223242526272829303132333435363738394041 | #include "add.h"#include <iostream>using namespace std; int main(){ if(addInitialize()) //初始化,这一步是必须的 { cout<<"success!!!"<<endl; } else { cout<<"fail!!!"<<endl; return 0; } //定义3个mwArray类型变量,用于存放矩阵 mwArray a(2,3,mxDOUBLE_CLASS); mwArray b(2,3,mxDOUBLE_CLASS); mwArray c(2,3,mxDOUBLE_CLASS); double x[] = {1,2,3,4,5,6}; double y[] = {7,8,9,10,11,12}; double *sum=new double[6]; //注意这个是*类型的 // 给输入 mxArray 对象赋值 a.SetData(x,6); b.SetData(y,6); //调用DLL函数 add(1,c,a,b); //获取结果 c.GetData(sum,6); //输出结果 for (int i=0;i<2;i++) { for (int j=0;j<3;j++) cout<<sum[j*2+i]<<" "; cout<<endl; } cout<<"it is successful !"<<endl; return 0;} |
这是因为以上链接中采用的是 x86,此操作系统为 x64,MATLAB R2012a为 x64,解决办法:
打开属性页右上角的配置管理器,活动解决方案平台,选择新建,加入64位:
最后运行,看到运行画面:
成功!Tips:如果还提示缺少dll文件,查找此dll所在的目录(推荐使用everything这个软件进行搜索),添加到Path环境变量中,或者复制到system32目录中。参考文章:http://blog.sina.com.cn/s/blog_a5fdbf0101018n91.htmlhttp://blog.csdn.net/wuyeyoulan23/article/details/21076913运行的时候会出现一个错误,说“缺少mclmcrrt7_17.dll,导致程序无法运行”,这个问题好解决,找到你的matlab安装文件下面的:D:\Program Files\MATLAB\R2012a\runtime\win32,注意,这个路径随每个人的安装不同,记得修改,在这个文件夹里面,你是不是看到了mclmcrrt7_17.dll这个文件呢,下面你只需要将这个文件所在的路径添加在系统环境变量中就可以了,也就是将D:\Program Files\MATLAB\R2012a\runtime\win32添加到系统变量PATH的路径中
相关文章推荐
- c++调用matlab生成的Dll动态连接库
- 【转载整理】eclipse 开发c/c++、Java使用JNI调用C程序、生成64位dll动态链接库
- c++调用matlab生成的Dll动态连接库
- VS2013 c++ 生成和调用DLL动态链接库
- VC调用MatLab生成的动态链接库
- vc++调用MATLAB complier生成的C动态链接库
- PB8调用使用C++与C#分别编写生成解压缩带有密码的zip压缩文件的动态链接库dll(部分内容转自互联网)
- VC与Matlab混合编程之调用动态链接库dll(C++)——<二>
- c++调用matlab生成的Dll动态连接库
- C语言调用MATLAB生成的动态链接库的具体方法
- c++调用matlab生成的Dll动态连接库
- Java调用C/C++编写的第三方dll动态链接库
- C#调用C++动态链接库之Win32dll(函数)、MFCdll(对话框)
- VS2013环境生成和调用DLL动态链接库
- C++文件中通过动态链接库调用C文件
- Qt调用VC++生成的动态链接库
- 本文是关于使用C++调用Matlab编译生成的Dll的说明
- c++与matlab联合编程,调用Deploytool 生成exe文件和dll文件
- 简单 Demo:C++编写、调用动态链接库
- C#调用matlab动态链接库