我想知道是否有人有从C ++ .lib文件创建mex文件的经验。我得到一个.lib及其相应的.h文件,需要从Matlab中调用.lib。
旁注:因为c ++文件是.lib,我看不到.lib文件的实现,但是我能够在其.h中定义调用。
提前致谢
答案 0 :(得分:1)
您的.lib很可能不支持Matlab格式,因此您必须创建包装函数。这是一个小例子(其中addMat()可以是.lib中的函数)
#include "mex.h"
//#include "Your_lib.h"
// Your local C++ function
void addMat( double *in1, double *in2, double *out, int R, int C)
{
for (int n=0; n<R*C; n++)
{
out[n] = in1[n]+in2[n];
}
}
// The Matlab wrapper
void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
double *inMat1,*inMat2,*outMat;
mwSize R,C;
// Pointer to an mxArray of type double
inMat1 = mxGetPr(prhs[0]);
inMat2 = mxGetPr(prhs[1]);
// Get size (assume both are the same as 1st arg)
R = mxGetM(prhs[0]);
C = mxGetN(prhs[0]);
// Create an real output mxArray of size [R,C]
plhs[0] = mxCreateDoubleMatrix(R,C,mxREAL);
outMat = mxGetPr(plhs[0]);
// Call your own function or lib
addMat(inMat1,inMat2,outMat,R,C);
}
如果您的包装文件被称为addMat.cpp
,那么您可以将其编译为
mex addMat.cpp
它将生成一个mex文件,在Matlab中运行:
A=addMat([1 2 3;1 1 1],[10 11 12; 2 2 2])
A =
11 13 15
3 3 3
带有外部库的构建命令应该类似于
mex -I<include dir> -L<lib dir> -l<your lib>.lib addMat.cpp