本文主要讲述将matlab编写好的m函数导出成dll,以供C++程序调用。使用matlab命令手动打包和matlab工具箱中deploytool的使用。写本文的主要原因是,在项目过程中遇到一个棘手问题:项目使用了vlfeat库,而vlfeat是c编写的,只是提供matlab接口。那么如可将项目中使用的库一并打包,就成了一个问题,在多方查找和各种尝试之后,记录下自己的经验,以供遇到类似问题的人作参考。
一、使用matlab命令打包
这种方式打包,分三步走:
1:在matlab中选择compiler。
在命令行窗口输入:mex -setup
Select a compiler:
[1] Microsoft Visual C++ 2010 in D:\devtool\Microsoft Visual Studio 10.0
[0] None
%%这里编译器会列出系统已经安装的编译器,可以选择适合的编译器。
2:选择builder.
输入:mbuild -setup
%%类似上一步
3:生成dll。
输入:mcc -W cpplib:mydll -T link:lib test.m
上面的指令(从mcc指令集中其实也可以很容易查到这条指令的意思)中cpplib:mydll中的mydll是自己要保存的dll,lib等文件的文件名,link:lib test.m中的test.m是你的m函数的文件名。
二、使用图形界面工具箱——deploytool
在命令行窗口输入:deploytool,会弹出如下对话框:
这里可以设置打包项目的名字和导出类型,这里我们要打包成DLL,所以选择C++ Shared Library。
选定之后会在matlab左侧新增一个窗口:
在上面的Exported Functions中,可以添加要导出的m函数文件,下方的Shared Resources …中则可以导出项目中使用到的各种资源文件,如,被调用的其它函数文件、c/c++文件各种lib或dll库以及图片等各种资源。这些将一起打包在生成的dll包中。这里我们将程序中用到的vlfeat库中的头文件、lib和dll打包了进去(在这里我将没用的东西,如各种文档,精简了一下,一来可以减少生成包的大小,二来也避免了不必要的错误,一开始我就遇到了有些多余文件在其中造成无法打包的情况)。
在Package选项卡中,可以查看打包生成的文件,已经增加和删除文件
点击右上角第一个build按钮(第二个按钮貌似可以生成自动解压的exe文件,下次尝试一下^_^),如果顺利,就可以完成打包啦!
完成之后,就会在当前目录下生成一个与打包项目同名的文件夹:
其中distrib目录下的.dll .h .lib就可以拿到C++程序中使用啦!
参考:
- 将.m文件编译成dll和lib库文件http://blog.sina.com.cn/s/blog_67dd3b950101es47.html
2.利用Matlab自带工具箱生成Dll和EXE文件http://blog.sina.com.cn/s/blog_4d4afb6d0100o31g.html

本文介绍了如何将MATLAB编写的M函数转换为DLL,以便于C++程序调用。详细阐述了使用MATLAB命令行和deploytool工具箱进行打包的步骤,包括设置编译器、选择构建类型、添加导出函数和资源文件,以及最后生成DLL的过程。此外,还提及了打包中可能遇到的问题和解决策略。
7821

被折叠的 条评论
为什么被折叠?



