C++与Matlab混合编程
2014-10-20 10:21
176 查看
来自:http://sxnuwhui.blog.163.com/blog/static/13706837320124282524436/
先保存一个“Matlab更改启动目录”的小技巧:在目录:$MATLAB\R2010a\toolbox\local下新建startup.m文件,例如,在文件中输入:cd
E:\Experiment\code
资料1:http://anony3721.blog.163.com/blog/static/51197420111145534021/
资料2:http://shijuanfeng.blogbus.com/logs/106781870.html
资料3:http://blog.csdn.net/xiazhaoqiang/article/details/6292138
通过使用C/C++与Matlab混合编程,既可以享受到C代码快速执行的速度,又可以方便的使用Matlab众多的库函数和强大的绘图功能。让 Matlab调用C函数是通过DLL文件实现的,而这个DLL的开发过程不仅仅可以使用Matlab自带的mex命令,还可以使用VC++开发环境,使用 VC有很多好处,一是让我回到了原来熟悉的开发环境中,二能够使用更加标准的C++编译器,第三点也是最爽的,可以使用VC强大的调试功能。
这里我分四个步骤讲解一个简单的开发过程,使用的Matlab版本为Matlab R2008a,VC版本为Visual C++ 2008 Express版本。
步骤一、新建一个空的dll程序
步骤二、为matlab函数提供头文件和静态库的支持
要让众多的Matlab接口函数能够运行起来,就必须给它们提供头文件和静态库的支持,为了避免每个项目都做这些添加工作,我们可以在Tools|Options|VC++ Directories下将头文件和静态库的目录添加进去,如图:
在Include files中添加”$matlab dir\extern\include”和”$matlab dir\extern\include\win32”,在Library files中添加”$matlab dir\extern\lib\win32\microsoft”。
在项目属性中,让链接器链接libmx.lib、libmat.lib和libmex.lib,如图:
在Preprocessor Definitions中添加MATLAB_MEX_FILE的宏定义。在Project|xx Project Properties|C/C++|Preprocessor中设置,如下图:
现在写一个hello world程序就可以编译通过,如:
第三步 利用def文件导出mexFunction函数
让函数从DLL中的导出有两种方法,__declspec(dllexport)命令导出和def文件导出,但由于需要导出mexFunction在”mex.h”中已经定义,所以前一种导出方法行不通,这里采用def文件导出。
首先告诉编译器我使用了xx.def文件,在Project|xx Project Properties|linker|input|Module Definition File中填上xx.def。
再编写xx.def的内容,只需两句话:
LIBRARY xx
EXPORTS mexFunction
这里的xx指的是模块名称(我用的是我新建的项目名称),并将def文件添加到你的工程中。
最后,将输出文件的后缀名改为mexw32。在Project|xx Project Properties|linker|General|Output File中,如图:
再次编译、生成,可以在生出目录mexw32文件。可以用dumpbin工具查看mexw32文件,可以看到有函数mexFunction已经导出。到这个时候DLL开发已经完成。下一步:
第四步、在启动调试时关联matlab
在Project|xx Project Properties|Debugging|Command里添加Matlab的启动地址:”$matlab dir\bin\win32\MATLAB.exe”。如图:
最后设定断点,启动调试,Matlab会自动启动,运行编写的DLL(mexw32)文件,就会触发断点,如:
当然,最终使用的mexw32文件还应该是Release版本的,这样的话,上面谈的部分设置还需要在Release版本中重新来过。
先保存一个“Matlab更改启动目录”的小技巧:在目录:$MATLAB\R2010a\toolbox\local下新建startup.m文件,例如,在文件中输入:cd
E:\Experiment\code
资料1:http://anony3721.blog.163.com/blog/static/51197420111145534021/
资料2:http://shijuanfeng.blogbus.com/logs/106781870.html
资料3:http://blog.csdn.net/xiazhaoqiang/article/details/6292138
通过使用C/C++与Matlab混合编程,既可以享受到C代码快速执行的速度,又可以方便的使用Matlab众多的库函数和强大的绘图功能。让 Matlab调用C函数是通过DLL文件实现的,而这个DLL的开发过程不仅仅可以使用Matlab自带的mex命令,还可以使用VC++开发环境,使用 VC有很多好处,一是让我回到了原来熟悉的开发环境中,二能够使用更加标准的C++编译器,第三点也是最爽的,可以使用VC强大的调试功能。
这里我分四个步骤讲解一个简单的开发过程,使用的Matlab版本为Matlab R2008a,VC版本为Visual C++ 2008 Express版本。
步骤一、新建一个空的dll程序
步骤二、为matlab函数提供头文件和静态库的支持
要让众多的Matlab接口函数能够运行起来,就必须给它们提供头文件和静态库的支持,为了避免每个项目都做这些添加工作,我们可以在Tools|Options|VC++ Directories下将头文件和静态库的目录添加进去,如图:
在Include files中添加”$matlab dir\extern\include”和”$matlab dir\extern\include\win32”,在Library files中添加”$matlab dir\extern\lib\win32\microsoft”。
在项目属性中,让链接器链接libmx.lib、libmat.lib和libmex.lib,如图:
在Preprocessor Definitions中添加MATLAB_MEX_FILE的宏定义。在Project|xx Project Properties|C/C++|Preprocessor中设置,如下图:
现在写一个hello world程序就可以编译通过,如:
第三步 利用def文件导出mexFunction函数
让函数从DLL中的导出有两种方法,__declspec(dllexport)命令导出和def文件导出,但由于需要导出mexFunction在”mex.h”中已经定义,所以前一种导出方法行不通,这里采用def文件导出。
首先告诉编译器我使用了xx.def文件,在Project|xx Project Properties|linker|input|Module Definition File中填上xx.def。
再编写xx.def的内容,只需两句话:
LIBRARY xx
EXPORTS mexFunction
这里的xx指的是模块名称(我用的是我新建的项目名称),并将def文件添加到你的工程中。
最后,将输出文件的后缀名改为mexw32。在Project|xx Project Properties|linker|General|Output File中,如图:
再次编译、生成,可以在生出目录mexw32文件。可以用dumpbin工具查看mexw32文件,可以看到有函数mexFunction已经导出。到这个时候DLL开发已经完成。下一步:
第四步、在启动调试时关联matlab
在Project|xx Project Properties|Debugging|Command里添加Matlab的启动地址:”$matlab dir\bin\win32\MATLAB.exe”。如图:
最后设定断点,启动调试,Matlab会自动启动,运行编写的DLL(mexw32)文件,就会触发断点,如:
当然,最终使用的mexw32文件还应该是Release版本的,这样的话,上面谈的部分设置还需要在Release版本中重新来过。
相关文章推荐
- matlab与c++混合编程
- matcom进行matlab与c++混合编程
- Compiler_C++(Matlab_C++混合编程)
- Matlab与C++混合编程(依赖OpenCV)
- matlab和C++混合编程
- C++与matlab混合编程基于主成份分析算法的数值分析(一)
- C/C++与Matlab混合编程初探
- C/C++与Matlab engine 混合编程
- <zz>matlab程序与C/C++代码混合编程
- Matlab与C++混合编程
- Matlab与c++混合编程[三.生成可以独立运行的Matlab程序]
- Matlab和C++混合编程
- C/C++与Matlab engine 混合编程
- C++和MATLAB混合编程-DLL篇[转]
- 【Matlab】C++和MATLAB混合编程-前篇
- 谈谈Matlab与C/C++或C#的互调用(混合编程)
- Matlab与c++混合编程[一.几篇文章]
- linux系统中的C++/MATLAB混合编程
- Matlab与C++混合编程初探
- c++与matlab混合编程,vs2010中调用.mat文件