最近想用matlab调用pcl(点云库),但是苦苦找寻,很多方法简单的C++代码可以实现,一旦涉及到第三方库就不行了,研究了一周,总结一下遇到的问题和解决方法。
首先介绍一个比较全面的书籍:https://download.youkuaiyun.com/download/Meet_csdn/12434403(若被删除,则搜索 精通matlab C/C++混合程序设计 第四版)
matlab版本为2017b,vs版本2015。
1.用MEX接口
这种方法是最常见的方法,相对来说也比较简单,主要涉及修改C++中入口函数和传递参数格式。
首先在matlab中输入
mex -setup
查看一下编译器的情况,我的会出现
然后先输入一些简单的代码测试是否能运行
test.cpp
#include "mex.h"
double add(double x, double y)
{
return x + y;
}
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
double *a;
double b, c;
plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);
a = mxGetPr(plhs[0]);
b = *(mxGetPr(prhs[0]));
c = *(mxGetPr(prhs[1]));
*a = add(b, c);
}
输入 mex test.cpp,正常情况下就会出现由vs2015编译,没有报错。
但是我的vs会报错,我也很苦恼不知道为什么,换到另一台电脑matlab2017b+vs2013就没问题,错误如下,如有大佬知道原因还请不吝赐教。