1

これは、ハフマンコーディングを使用して圧縮画像をデコードおよびリンクするための 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 ファイルをサポートしていません。

プログラムが正常であることはわかっていますが、自分が何をしているのかわかりません。どんな体でも助けてください。

4

1 に答える 1

0

呼び出す正しい関数はmexErrMsgTxt. 関数名は大文字と小文字が区別されます。スペルが間違っているため、リンカーはそれを見つけることができません:

mexErrMSgTxt("Too many output arguments.");
于 2012-10-23T13:20:16.397 に答える