做完普林斯顿的PI相机SDK是真的不友好,做完matlab的开发却被告知要付费才可以使用动态库,打电话问技术,只有C++才免费,莫得办法,只好自己做动态库了。
而mex就是把matlab和c++接在一起的桥梁
所谓动态库,我们一般见到的是 .DLL格式的,我们接下来使用的mex生成的是mexw64格式的,实际上和.DLL没什么区别,当然,也有mexw32(32位Windows系统)的。
接下来就是一顿猛如虎的操作了:
首先打开MATLAB,命令行输入:mex -setup(x与-之间有空格)。看图吧:
本机配置是vs2017和matlab2018.
看到有两个选项,
一个是mex -setup C++ 表示是c++语言
另一个是mex -setup FORTRAN,应该是一个公式编辑器,算是另一种语言吧,我也不是特别了解、
果断点下C++,看图:
下面进入正题:
首先把工作目录调整到含有你编译的cpp文件下,我为了方便,新建了一个文件夹,把cpp放入其中,
看图:
可以看到,目录下含有一个mex.h和所需要编译的cpp。这个mex.h文件必须包含,它是matlab自带的文件,具体目录在你的
MATLAB目录下MATLAB2018\R2018a\extern\include。
然后你需要对你的cpp做一些修改,首先,填入头文件#include "mex.h"
然后把你的int main()函数换成void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
因为这个函数对于mex的编译过程中就相当于c++独自编译中的mian函数
具体的输入输出函数设定请参考
https://blog.csdn.net/yimiyangguang185/article/details/52623075
大神写的非常好
剩下的事情就是命令行输入 mex -filename.cpp(filename是你的cpp名字)
看图:
然后在你的目录下就出现了你梦寐以求的东西
mex_demo1.mexw64文件,它既相当于动态库,对于matlab也相当于.m文件,但它的优先级比.m要高
比如A.m和A.mexw64.你引用时,优先引用A.mexw64.
这只是一个简单的例子,接下来就要重点了,就是如果cpp文件需要引入.lib文件,该如何引用?
首先我们不引用,看看会出现什么问题:
右侧文件下的头文件直接放在目录下就好,但是.lib文件却没有作用
报了无法解析外部符号的作用。
关于这个问题的解决,我们看一下MATLAB官方帮助:
(...前面一个空格三个点是matlab的换行符号)
说白了,就是 -L指路径。-l指lib文件。
我们再来执行以下
编译完成,看到了梦寐以求的东西。。。。。。开心
第一次错误是我手残,没有打l。。。。。。。
感谢观看。。。。。。。。。。。。。。。。。。
’