程序在编译时出现错误
错误使用 mex
正在创建库 mibayes.lib 和对象 mibayes.exp
mibayes.obj : error LNK2019: 无法解析的外部符号 mxCreateScalarDouble,函数 writeDistToMxStruct 中引用了该符号
mibayes.mexw64 : fatal error LNK1120: 1 个无法解析的外部命令
出错 condmex (第 16 行)
eval(cmd);
出错 install (第 5 行)
condmex( 'mibayes', 'mutual_information', 'mex -O mibayes.c mi_and_bayes.c' );
出错 install (第 19 行)
install;
解决方案
找到路径\lsm\utilities\mutual_information中的mibayes.c文件对下面语句进行修改
void writeDistToMxStruct(mxArray **Tables, CountDist *D) {
mxArray *UX,*NX;
mxArray *UY,*NY;
mxArray *NXY;
*Tables = mxCreateStructMatrix(1, 1, nTablesFields, tablesFields);
if ( D->handle > -1 )
// mxSetField(*Tables,0,"handle",mxCreateScalarDouble(D->handle)); 此处进行修改
mxSetField(*Tables,0,"handle",mxCreateDoubleScalar(D->handle));
else
mxSetField(*Tables,0,"handle",mxCreateDoubleMatrix(0, 0, mxREAL));
MTree2mxArray(D->Xmargin,&UX,&NX);
mxSetField(*Tables, 0, "UX", UX);
mxSetField(*Tables, 0, "NX", NX);
MTree2mxArray(D->Ymargin,&UY,&NY);
mxSetField(*Tables, 0, "UY", UY);
mxSetField(*Tables, 0, "NY", NY);
jointTree2mxArray(D,&NXY);
mxSetField(*Tables, 0, "NXY", NXY);
}
原因
高matlab版本不再支持mxCreateScalarDouble,而被变为mxCreateDoubleScalar,因而要把所有的cpp源文件中出现mxCreateScalarDouble全部换掉。
mxCreateDoubleScalar
Create scalar, double-precision array initialized to the specified value
Note This function replaces mxCreateScalarDouble in version 6.5 of MATLAB. mxCreateScalarDouble is still supported in version 6.5, but may be removed in a future version.