2017-06-13 25 views
0

誰かがmexファイルをC++の.libファイルから作成した経験があるのだろうかと思っていました。私は.libとその対応する.hファイルを与えられ、.libをMatlabから呼び出し可能にする必要があります。mexのC++ .libファイル

サイドノート:.libファイルであるため、.libファイルの実装が見えませんが、.hibファイルで定義されている呼び出しを行うことができます。事前に

おかげ

+0

リンカーとしてMexコマンドを使用できます。あなたはあなたが好むコンパイラを使ってすべてをオブジェクトファイルにコンパイルし、Mexコマンドを使用してMex実行可能ファイルにリンクします。 – user3528438

+0

式からmexをカットし、コマンドラインから通常のプログラムをビルドして、コンパイラに渡す必要があるスイッチがわかっていることを確認します。それから、同じスイッチでmexを呼び出すのと同じくらい簡単かもしれません。少なくともg ++で動作します。 – user4581301

答えて

1

あなたの.lib最も可能性が高いあなたはラッパー関数を作成する必要がありますのでMatlabの形式をサポートしていません。ここにあなたのラッパーファイルは、その後、あなたは

mex addMat.cpp 

としてコンパイルすることができ、それが生成されますaddMat.cppと呼ばれている場合

#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は()あなたの.libから機能することができる)の小さな例です。 MEXファイル、MATLABでそれを実行します。

A=addMat([1 2 3;1 1 1],[10 11 12; 2 2 2]) 

A = 

    11 13 15 
    3  3  3 

ビルドコマンド外部LIBとは

のようなものでなければなりません
mex -I<include dir> -L<lib dir> -l<your lib>.lib addMat.cpp 
+0

だから、明確にするために、別のC++クラスからlibの呼び出しを参照する必要がありますか?次に、 "mex ___。cpp"コマンドを使ってこの別の.cppファイルをコンパイルすることで、Matlab内のこれらの関数にアクセスできますか? (同じディレクトリにいると仮定して)助けてくれてありがとう。 – 54321

+0

Matlabから直接呼び出す関数のラッパーを作成するだけで済みます。生成された.mexw64ファイルは、Matlabパスに含まれている限り任意のディレクトリに置くことができます(addpath()を参照)。 –

関連する問題