MATLAB与C++使用MEX混合编译时cpp文件的静态链接库lib问题

做完普林斯顿的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。。。。。。。

感谢观看。。。。。。。。。。。。。。。。。。

 

 

 

 

 

 

 

 

 

 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值