前言:Matlab算法丰富,直接可以拿来使用,但是又不熟悉m语言或者要求效率高的代码,内部函数封装Dll后C二次处理封装dll
一、Matlab生成DLL
备注:
配置环境变量(很重要,否则编译会出现“找不到libmx.dll文件”):
D:\Install\MatLab\bin\win64;(路径参考,实际安装位置,默认软件自动设置环境变量)
在matlab命令行输入mex -setup,按提示选择合适的选项。
在matlab命令行输入mbuild -setup,按提示选择合适的选项。
以上配置只需进行一次就可以了,不必每写一个程序都重复一遍。
1、命令行输入deploytool可弹出对话框,选择“Library Complier”
2、“TYPE”选择制作的库(C++ Shared Library),“EXPORTED FUNCTIONS”中选择需要转化成动态链接库的Matlab.m文件,添加完成后在Library Name编辑框中输入你想给Dll文件命名的名称。然后点击下面Package即可完成转化。
注:生成的dll拷贝到另一台电脑需要对应版本的MATLAB Runtime组件(MCR)。
二、VS2013 C二次封装DLL
1、点击“新建项目”创建“Win32控制台应用程序”
2、选择DLL,空项目
3、点击源文件,创建一个main.c文件
4、点击工程属性页,“配置管理器”可创建64位平台DLL(根据需要)。
5、配置VS2013属性表(Matlab库依赖,调用matlab引擎)
项目属性 - 配置属性 - VC++目录 -
包含目录:D:\Install\MatLab\extern\include;(路径参考)
库目录:D:\Install\MatLab\extern\lib\win64\microsoft;(路径参考)
项目属性 - 配置属性 -链接器 - 输入 - 附加依赖项:libmx.lib;libmat.lib;libeng.lib;mclmcr.lib;mclmcrrt.lib;libmex.lib
或者也可通过#pragma comment( lib, "mclmcrrt.lib" )指令在C文件中附加依赖项。
项目->属性->配置属性->C/C++-代码生成->运行库->多线程 (/MT)
说明:这种方法应该对于一些程序来说最实用,仅需一个程序,放到哪都可以运行。
/MT意思就是静态编译VC运行库,静态了之后就不会再依赖MSVCR100.DLL或者MSVCR80.DLL(使用VS2013)了。