C++ .lib 文件到墨西哥

C++ .lib file to mex

本文关键字:墨西哥 文件 lib C++      更新时间:2023-10-16

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

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

提前致谢

你的.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