これは、ハフマンコーディングを使用して圧縮画像をデコードおよびリンクするための 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 ファイルをサポートしていません。
プログラムが正常であることはわかっていますが、自分が何をしているのかわかりません。どんな体でも助けてください。