matlab2014a + win764bit + vs2013混合编程(.m转成dll供C++调用)
2017-08-16 13:36
155 查看
在matlab中可以通过mbuild工具将.m文件编译成dll文件供外部的C++程序调用,这样就可以实现matlab和C++混合编程的目的。
1. 使用matlab生成dll文件
1.1 首先需要带有mcc编译器的matlab软件,这个可以通过在matlab命令行中输入:!mcc命令来查看
1.2然后再命令窗口输入mbuild -setup选中要使用的C++编译器,在这里我选择了VS2013的编译器。
1.3选好编译器后再命令窗口输入deploytool进入编译窗口,在弹出的窗口中选择第二项,即生成dll动态链接库的形式,之后会弹出如下窗口
在MATLAB Complie对话框中的左上角APPLICATION TYPE中选择C++ Shared Library类型,在旁边的白色框中点击加号将需要编译成dll的.m文件添加到当前项目中,
1.4之后就可以点击右上角的package按钮生成dll文件,点击之后matlab会弹出编译进行的对话框,此时只需要等待既可以了
等待一段时间之后就可以在指定的目录下看到生成dll以及相应的.h和.lib文件
2. dll简单测试
使用新建一个win32的空的控制台项目,同时将刚刚生成的mysvd.h,mysvd.lib和mysvd.dll拷贝到当前项目文件夹下,然后输入以下代码
相关环境:
结果:
出处:http://blog.csdn.net/sjhuangx/article/details/49305237
1. 使用matlab生成dll文件
1.1 首先需要带有mcc编译器的matlab软件,这个可以通过在matlab命令行中输入:!mcc命令来查看
1.2然后再命令窗口输入mbuild -setup选中要使用的C++编译器,在这里我选择了VS2013的编译器。
1.3选好编译器后再命令窗口输入deploytool进入编译窗口,在弹出的窗口中选择第二项,即生成dll动态链接库的形式,之后会弹出如下窗口
在MATLAB Complie对话框中的左上角APPLICATION TYPE中选择C++ Shared Library类型,在旁边的白色框中点击加号将需要编译成dll的.m文件添加到当前项目中,
1.4之后就可以点击右上角的package按钮生成dll文件,点击之后matlab会弹出编译进行的对话框,此时只需要等待既可以了
等待一段时间之后就可以在指定的目录下看到生成dll以及相应的.h和.lib文件
2. dll简单测试
使用新建一个win32的空的控制台项目,同时将刚刚生成的mysvd.h,mysvd.lib和mysvd.dll拷贝到当前项目文件夹下,然后输入以下代码
#include <iostream> #include "mclmcr.h" #include "matrix.h" #include "mclcppclass.h" #include "mysvd.h" using namespace std; #pragma comment(lib,"mysvd.lib") int main() { if (!mysvdInitialize()) //初始化,在libmysvd.h中 { cout << "Could not initialize libmysvd!" << endl; exit(0); } double data[9] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; mwArray a(3, 3, mxDOUBLE_CLASS, mxREAL); a.SetData(data, 9); cout << a << endl << endl; //显然,mwArry类对<<是有运算符重载的 mwArray s(3, 3, mxDOUBLE_CLASS, mxREAL); mwArray v(3, 3, mxDOUBLE_CLASS, mxREAL); mwArray d(3, 3, mxDOUBLE_CLASS, mxREAL); mysvd(1, s, a); //调用自己用matlab写的函数,对a做奇异值分解 cout << s << endl << endl; cout << v << endl << endl; for (int i = 1; i < 4; i++) //逐个显示元素 { for (int j = 1; j < 4; j++) { cout << d.Get(i, j) << " "; } cout << endl; } cin.get(); return 0; }
相关环境:
包含目录:C:\Program Files (x86)\MATLAB\R2014a\extern\include 库目录:C:\Program Files (x86)\MATLAB\R2014a\extern\lib\win32\microsoft 在链接器->输入选项中,附加依赖项: libmat.lib libmex.lib mclmcr.lib mclmcrrt.lib
结果:
出处:http://blog.csdn.net/sjhuangx/article/details/49305237
相关文章推荐
- matlab2014a + win764bit + vs2013混合编程(.m转成dll供C++调用)
- JAVA 与C++ 混合编程 Java中调用C/C++生成的DLL(转)
- JAVA 与C++ 混合编程 Java中调用C/C++生成的DLL
- C#与DLL和COM的混合编程(1)-C#调用C++写的非托管的DLL中导出的函数
- Matlab与c++混合编程[四.通过VC调用Matlab编译产生的dll文件]
- C#与DLL和COM的混合编程(1)-C#调用C++写的非托管的DLL中导出的函数
- VS2010 C++创建、调用DLL图解
- C# C++ dll的相互调用
- C#调用C++写的DLL总结
- 22.Silverlight使用WebService调用C++,Delphi编写的DLL文件
- C++静态调用DLL
- [转载]在C++中调用DLL中的函数
- Metro C#中调用C++中的DLL
- Eclipse、MinGW、JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法)
- native c++/qt中如何调用c#dll
- C/C++混合编程,实现C/C++间的函数相互调用详解
- matlab2010 + vc6.0混合编程实例(调用dll)
- golang调用c++dll 获取mac地址,用户名,内存大小
- C# 调用C++ CLR dll类库时,实现从 string 到 sbyte* 的转换
- C++调用C#生成的dll