使用matlab在huffman中链接和解码的解开函数中的错误

时间:2012-10-23 12:53:38

标签: matlab mex

这是用于解开的代码,通过该代码我想使用霍夫曼编码解码和链接压缩图像。

 #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文件

我知道程序还可以,但我不知道我在做什么?请任何身体帮助我。

1 个答案:

答案 0 :(得分:0)

要调用的正确函数是mexErrMsgTxt。函数名称区分大小写。你拼错了,所以链接器找不到它:

mexErrMSgTxt("Too many output arguments.");