C ++ .lib文件到mex

时间:2017-06-13 21:52:42

标签: c++ matlab mex lib

我想知道是否有人有从C ++ .lib文件创建mex文件的经验。我得到一个.lib及其相应的.h文件,需要从Matlab中调用.lib。

旁注:因为c ++文件是.lib,我看不到.lib文件的实现,但是我能够在其.h中定义调用。

提前致谢

1 个答案:

答案 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