1

mex と armadillo プログラムの例をコンパイルするのに苦労しており、誰かが私を助けてくれるかどうか疑問に思っていました。Mac OS を使用していますが、インストールに成功しました。

コード:

#include "mex.h"
#include "math.h"
#include<armadillo>


using namespace arma;

void matlab2arma(mat& A, const mxArray *mxdata){
// delete [] A.mem; // don't do this!
access::rw(A.mem)=mxGetPr(mxdata);
access::rw(A.n_rows)=mxGetM(mxdata); // transposed!
access::rw(A.n_cols)=mxGetN(mxdata);
access::rw(A.n_elem)=A.n_rows*A.n_cols;
};

void freeVar(mat& A, const double *ptr){
access::rw(A.mem)=ptr;
access::rw(A.n_rows)=1; // transposed!
access::rw(A.n_cols)=1;
access::rw(A.n_elem)=1;
};

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
if (nrhs != 2)
mexErrMsgTxt("Incorrect number of input arguments");
if (nlhs != 1)
mexErrMsgTxt("Incorrect number of output arguments");

mat D1(1,1);
const double* D1mem=access::rw(D1.mem);
matlab2arma(D1,prhs[0]); // First create the matrix, then change it to point to the matlab data.

mat D2(1,1);
const double* D2mem=access::rw(D2.mem);
matlab2arma(D2,prhs[1]);

// check if the input corresponds to what you are expecting
if( D1.n_rows != D2.n_rows )
mexErrMsgTxt("Columns of D1 and D2 must be of equal length!");

if( D1.n_cols != D2.n_cols )
mexErrMsgTxt("Rows of D1 and D2 must be of equal length!");

plhs[0] = mxCreateDoubleMatrix(D1.n_rows, D1.n_cols, mxREAL);
mat output(1,1);
const double* outputmem=access::rw(output.mem);
matlab2arma(output,plhs[0]);

output=D1+D2;
// output.print();

freeVar(D1,D1mem); // Change back the pointers!!
freeVar(D2,D2mem);
freeVar(output,outputmem);
return;
}
4

2 に答える 2

1

次のコンパイル コマンドを使用して、私のシステム (Ubuntu 12.04、64 ビット、MatlabR2013a、g++) で動作します。

mex mexTest.cpp -llapack -larmadillo -lblas

mexTest.cpp には、指定したコード スニペットが含まれています。Matlab で Armadillo を適切にコンパイルするには、ライブラリ パスを適切に設定する必要があることに注意してください。これらは mexopts.sh で更新するか、$matlabroot/sys/os/XXXXX のシンボリック リンクをリダイレクトすることで更新できます。XXXXX はシステム (32/64 ビットおよび OS) によって異なる場合があります。

于 2013-04-12T19:43:34.277 に答える
0

armadillo が正しくセットアップされている場合は、次の手順を実行するだけで十分です (コードも正常に機能しました)。

mex your_code.cpp -larmadillo
于 2014-06-11T20:00:02.533 に答える