这是我想使用霍夫曼编码解码和链接压缩图像的解开代码。
#包括“mex.h”
void unrav(uint16_T *hx, double *link, double *x, double xsz,int hxsz)
{
诠释我=15;
整数 j=0,k=0,n=0;
而 (xsz-k)
{
if (*(link + n) >0) {
如果 ((*(hx + j) >> i) & 0x0001)
n=*(链接 + n);
否则 n=*(链接 + n) - 1;
如果 (i) 我——;否则 { j++; 我= 15;}
如果 (j>hxsz)
mexErrMsgTxt("代码已用完???");
}
别的 {
*(x + k++) =-*(链接 +n);
n=0;}
}
如果 (k== xsz -1)
*(x+ k++) =-*(链接+n);
}
无效 mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[])
{
双*链接,*x,xsz;
uint16_T *hx;
诠释 hxsz;
如果(nrhs != 3)
mexErrMsgTxt("需要三个输入。");
否则如果 (nlhs>1)
mexErrMSgTxt("输出参数太多。");
if(!mxIsDouble(prhs[2]) || mxIsComplex(prhs[2]) ||
mxGetN(prhs[2])*mxGetM(prhs[2]) !=1)
mexErrMsgTxt("输入大小必须是标量");
hx=(uint16_T *) mxGetData(prhs[0]);
链接=(双*)mxGetData(prhs [1]);
xsz=mxGetScalar(prhs[2]);
hxsz=mxGetM(prhs[0]);
plhs[0]=mxCreateDoubleMatrix(xsz, 1, mxREAL);
x=(双 *) mxGetData(plhs[0]);
unrav(hx,链接,x,xsz,hxsz);
}
这是我的解开程序,但是在 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 文件
我知道程序没问题,但我不知道我该怎么做?请任何人帮助我。