解决MATLAB编译问题mex error C2668:“log”

2025-10-02 09:18:02

1、首先将下载的程序包解压到目标路径,并将MATLAB的工作路径设置成跟解压文件目录一致。

解决MATLAB编译问题mex error C2668:“log”

解决MATLAB编译问题mex error C2668:“log”

2、创建变量X和变量Y,测试程序是否能正常运行并跑出结果;

错误提示:未定义与 'double' 类型的输入参数相对应的函数 'estpab'

说明MATLAB运行目录下不存在可调用的estpab程序文件,但是检查文件目录发现这一函数是有的,所以说明这个函数的cpp没有成功编译。

调研后发现,如图所示的三种文件版本比较旧,而且基于32位系统生成,不适用于WIN 10 64位系统的MATLAB 2014a软件版本。

解决MATLAB编译问题mex error C2668:“log”

解决MATLAB编译问题mex error C2668:“log”

3、重新对程序包中的所有cpp文件进行编译(使用mex命令):

执行 mex estpab.cpp, 成功;

执行 mex estcondentropy.cpp,失败,错误提示:

错误使用 mex

estcondentropy.cpp

F:\2spectranalysis\estcondentropy.cpp(33) : warning C4267: “初始化”: 从“size_t”转换到“long”,可能丢失数据

F:\2spectranalysis\estcondentropy.cpp(34) : warning C4267: “初始化”: 从“size_t”转换到“long”,可能丢失数据

F:\2spectranalysis\estcondentropy.cpp(37) : warning C4267: “初始化”: 从“size_t”转换到“long”,可能丢失数据

F:\2spectranalysis\estcondentropy.cpp(65) : error C2668: “log”: 对重载函数的调用不明确

        E:\visualstudio\VC\INCLUDE\math.h(575): 可能是“long double log(long double)”

        E:\visualstudio\VC\INCLUDE\math.h(527): 或       “float log(float)”

        E:\visualstudio\VC\INCLUDE\math.h(120): 或       “double log(double)”

        尝试匹配参数列表“(int)”时

其中只有error提示比较重要,下面重点讲如何根据提示解决error。

解决MATLAB编译问题mex error C2668:“log”

解决MATLAB编译问题mex error C2668:“log”

4、error显示log函数调用出了问题,下面紧跟着提示可能是long double log (long double)....,这说明,应该是log函数的输入或输出变量的数据类型有问题。

双击查看estcondentropy.cpp,按照提示找到错误代码行65,发现log函数的输入是一个整型常量“2”,这样我们就找到了问题症结。

将“2”改为“2.00”,意义在于将输入参数的数据类型由整型改为了浮点型。

解决MATLAB编译问题mex error C2668:“log”

解决MATLAB编译问题mex error C2668:“log”

5、再次执行编译命令,显示编译成功。依次对本程序包中的所有cpp文件进行编译,编译后每个cpp文件都生成一个对应的.mexw64文件,这时可以删掉所有的.cpp和.h文件,因为MATLAB调用的是这个.mexw64文件,只要保留这个文件和.m文件即可。

再次运行程序包的主函数(就是所有其他函数程序都编译好后,它才能运行的函数),本例中为mutualinfo函数

执行:mutualinfo(X,Y)  输出结果,证明程序调用成功,这一程序包是可用的。

解决MATLAB编译问题mex error C2668:“log”

解决MATLAB编译问题mex error C2668:“log”

解决MATLAB编译问题mex error C2668:“log”

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢