这是用于解开的代码,通过该代码我想使用霍夫曼编码解码和链接压缩图像。
#include "mex.h" void unrav(uint16_T *hx, double *link, double *x, double xsz,int hxsz) { int i=15; int j=0, k=0, n=0; while (xsz-k) { if (*(link + n) >0) { if ((*(hx + j) >> i) & 0x0001) n=*(link + n); else n=*(link + n) - 1; if (i) i--; else { j++; i= 15;} if (j>hxsz) mexErrMsgTxt("Out of cod ebits ???"); } else { *(x + k++) =-*(link +n); n=0; } } if (k== xsz -1) *(x+ k++) =-*(link +n); } void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { double *link, *x, xsz; uint16_T *hx; int hxsz; if(nrhs !=3) mexErrMsgTxt("Three inputs required."); else if (nlhs>1) mexErrMSgTxt("Too many output arguments."); if(!mxIsDouble(prhs[2]) || mxIsComplex(prhs[2]) || mxGetN(prhs[2])*mxGetM(prhs[2]) !=1) mexErrMsgTxt("Input size must be a scalar"); 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, link, x, xsz, hxsz); }
这是我的解开程序,但在matlab R2012a上执行它时会显示如下错误:
Undefined symbols for architecture x86_64: "_mexErrMSgTxt", referenced from: _mexFunction in unrav.o ld: symbol(s) not found for architecture x86_64 collect2: ld returned 1 exit status mex: link of ' "unrav.mexmaci64"' failed.
我使用的是Mac OSX Lion 10.7.2并且我有Xcode 4.2,但我尝试在那里编译它但不支持mex.h文件
我知道程序还可以,但我不知道我在做什么?请任何身体帮助我。
答案 0 :(得分:0)
要调用的正确函数是mexErrMsgTxt
。函数名称区分大小写。你拼错了,所以链接器找不到它:
mexErrMSgTxt("Too many output arguments.");