Matlab 脚本编译成dll被c++调用
2016-02-01 11:21
453 查看
当需要在C++程序中调用Matlab写好的函数时,把Matlab函数编译成dll动态库是一种好方法。
测试环境: Windows 10, Matlab 2015b, Visual Studio 2012
具体的步骤为:
1、在Matlab中选择compiler:
在命令窗口输入
2、在matlab中选择builder:
在命令窗口输入
3、生成dll:
在命令窗口输入
如果想看到编译过程中的详细信息,可以增加-v参数。
具体地,给出一个例子说明:
在Matlab的Editor中写入:
之后在同级目录中会产生一系列相应的文件,其中包括了.h、.cpp、.dll、.lib文件。
如果在实际中myPlus.m文件中需要调用其它的m文件,文件路径也不在当前路径的话,可以通过-a 命令把包含依赖的m文件的路径添加到后边(不需要引号)
下边为如何在C++中调用Matlab编译产生的dll库:
打开VS2012,新建控制台项目“dllTest”,然后将上边四个后缀名文件拷贝到项目路径下。
在 [解决方案资源管理器] 中,项目名字“dllTest”上右键选择 [属性],打开 [dllTest属性卡] ->[配置属性]->[VC++ 目录],之后编辑 [包含目录],添加路径"C:\Program Files\MATLAB\R2015b\extern\include"。
之后在 [dllTest属性卡] ->[配置属性]->[链接器]->[常规] 中的 [附加库目录] 中,编辑添加"C:\Program Files\MATLAB\R2015b\extern\lib\win64\microsoft",以及"D:\Users\DELL\Documents\MATLAB\dllTest"。其中"D:\Users\DELL\Documents\MATLAB\dllTest"为编译的dll所在目录。同时,在 [dllTest属性卡] ->[配置属性]->[链接器]->[输入] 中的
[附加依赖项] 中,编辑添加"mclmcr.lib","mclmcrrt.lib", "myPlus.lib"。
经过上边的配置之后,就可以编写调用dll库的C++程序了。
后续再继续整理如何在C++中调用Matlab编译的dll库方法。
测试环境: Windows 10, Matlab 2015b, Visual Studio 2012
具体的步骤为:
1、在Matlab中选择compiler:
在命令窗口输入
mex -setup
2、在matlab中选择builder:
在命令窗口输入
mbuild -setup
3、生成dll:
在命令窗口输入
mcc -W cpplib:dllname -T link:lib function.m -a dependfilepath其中dllname是希望编译成的dll的名字, function.m为将要编译的matlab函数的名字, -a后边接function运行时需要依赖的文件所在的路径,路径会递归包含进去。
如果想看到编译过程中的详细信息,可以增加-v参数。
具体地,给出一个例子说明:
在Matlab的Editor中写入:
function [out] = myPlus(a, b) out = a + b; end保存成文件myPlus.m,之后在Matlab控制台输入下边命令(这里我的max和mbuild已经配置好了,不用进行改动。):
>> mex -setup MEX configured to use 'Microsoft Visual C++ 2012 (C)' for C language compilation. Warning: The MATLAB C and Fortran API has changed to support MATLAB variables with more than 2^32-1 elements. In the near future you will be required to update your code to utilize the new API. You can find more information about this at: http://www.mathworks.com/help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html. To choose a different language, select one from the following: mex -setup C++ mex -setup FORTRAN >> mbuild -setup MBUILD configured to use 'Microsoft Visual C++ 2012 (C)' for C language compilation. To choose a different language, select one from the following: mex -setup C++ -client MBUILD mex -setup FORTRAN -client MBUILD >> mcc -W cpplib:myPlus -T link:lib myPlus.m 使用 'Microsoft Visual C++ 2012' 编译。 >>
之后在同级目录中会产生一系列相应的文件,其中包括了.h、.cpp、.dll、.lib文件。
如果在实际中myPlus.m文件中需要调用其它的m文件,文件路径也不在当前路径的话,可以通过-a 命令把包含依赖的m文件的路径添加到后边(不需要引号)
下边为如何在C++中调用Matlab编译产生的dll库:
打开VS2012,新建控制台项目“dllTest”,然后将上边四个后缀名文件拷贝到项目路径下。
在 [解决方案资源管理器] 中,项目名字“dllTest”上右键选择 [属性],打开 [dllTest属性卡] ->[配置属性]->[VC++ 目录],之后编辑 [包含目录],添加路径"C:\Program Files\MATLAB\R2015b\extern\include"。
之后在 [dllTest属性卡] ->[配置属性]->[链接器]->[常规] 中的 [附加库目录] 中,编辑添加"C:\Program Files\MATLAB\R2015b\extern\lib\win64\microsoft",以及"D:\Users\DELL\Documents\MATLAB\dllTest"。其中"D:\Users\DELL\Documents\MATLAB\dllTest"为编译的dll所在目录。同时,在 [dllTest属性卡] ->[配置属性]->[链接器]->[输入] 中的
[附加依赖项] 中,编辑添加"mclmcr.lib","mclmcrrt.lib", "myPlus.lib"。
经过上边的配置之后,就可以编写调用dll库的C++程序了。
后续再继续整理如何在C++中调用Matlab编译的dll库方法。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性