誰かがmexファイルをC++の.libファイルから作成した経験があるのだろうかと思っていました。私は.libとその対応する.hファイルを与えられ、.libをMatlabから呼び出し可能にする必要があります。mexのC++ .libファイル
サイドノート:.libファイルであるため、.libファイルの実装が見えませんが、.hibファイルで定義されている呼び出しを行うことができます。事前に
おかげ
誰かがmexファイルをC++の.libファイルから作成した経験があるのだろうかと思っていました。私は.libとその対応する.hファイルを与えられ、.libをMatlabから呼び出し可能にする必要があります。mexのC++ .libファイル
サイドノート:.libファイルであるため、.libファイルの実装が見えませんが、.hibファイルで定義されている呼び出しを行うことができます。事前に
おかげ
あなたの.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
だから、明確にするために、別のC++クラスからlibの呼び出しを参照する必要がありますか?次に、 "mex ___。cpp"コマンドを使ってこの別の.cppファイルをコンパイルすることで、Matlab内のこれらの関数にアクセスできますか? (同じディレクトリにいると仮定して)助けてくれてありがとう。 – 54321
Matlabから直接呼び出す関数のラッパーを作成するだけで済みます。生成された.mexw64ファイルは、Matlabパスに含まれている限り任意のディレクトリに置くことができます(addpath()を参照)。 –
リンカーとしてMexコマンドを使用できます。あなたはあなたが好むコンパイラを使ってすべてをオブジェクトファイルにコンパイルし、Mexコマンドを使用してMex実行可能ファイルにリンクします。 – user3528438
式からmexをカットし、コマンドラインから通常のプログラムをビルドして、コンパイラに渡す必要があるスイッチがわかっていることを確認します。それから、同じスイッチでmexを呼び出すのと同じくらい簡単かもしれません。少なくともg ++で動作します。 – user4581301