これは、ハフマンコーディングを使用して圧縮画像をデコードおよびリンクするための unravel のコードです。
#include "mex.h" void unrav(uint16_T *hx, double *link, double *x, double xsz,int hxsz) { 整数 i=15; int j=0、k=0、n=0; ながら (xsz-k) { if (*(link + n) >0) { if ((*(hx + j) >> i) & 0x0001) n=*(リンク + n); そうでなければ n=*(リンク + n) - 1; もし (i) i--; そうでなければ { j++; 私は= 15;} もし (j>hxsz) mexErrMsgTxt("コードビット不足???"); } そうしないと { *(x + k++) =-*(リンク +n); n=0; } } もし (k== xsz -1) *(x+ k++) =-*(リンク +n); } void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { ダブル *リンク、*x、xsz; uint16_T *hx; int hxsz; if(nrhs !=3) mexErrMsgTxt("3 つの入力が必要です。"); そうでなければ (nlhs>1) mexErrMSgTxt("出力引数が多すぎます。"); if(!mxIsDouble(prhs[2]) || mxIsComplex(prhs[2]) || mxGetN(prhs[2])*mxGetM(prhs[2]) !=1) mexErrMsgTxt("入力サイズはスカラーでなければなりません"); hx=(uint16_T *) mxGetData(prhs[0]); link=(double*) mxGetData(prhs[1]); xsz=mxGetScalar(prhs[2]); hxsz=mxGetM(prhs[0]); plhs[0]=mxCreateDoubleMatrix(xsz, 1, mxREAL); x=(double *) mxGetData(plhs[0]); unrav(hx, リンク, x, xsz, hxsz); }
これは私の unravel プログラムですが、matlab R2012a で実行すると、次のようなエラーが表示されます。
アーキテクチャ x86_64 の未定義のシンボル: 「_mexErrMSgTxt」、次から参照: unrav.o の _mexFunction ld: アーキテクチャ x86_64 のシンボルが見つかりません collect2: ld が 1 つの終了ステータスを返しました mex: ' "unrav.mexmaci64"' のリンクに失敗しました。
Mac OSX Lion 10.7.2 を使用しており、Xcode 4.2 を使用していますが、そこでコンパイルしようとしましたが、mex.h ファイルをサポートしていません。
プログラムが正常であることはわかっていますが、自分が何をしているのかわかりません。どんな体でも助けてください。