matlab编译多文件调与'void mexFunction(int, mxArray**, int, const mxArray**)' error: cannot convert 'int*'

问题原因:64位与32位兼容性问题。

错误使用 mex
D:\hxg\text.cpp: In function 'void mexFunction(int, mxArray**, int, const mxArray**)':
D:\hxg\text.cpp:134:60: error: cannot convert 'int*' to 'const mwSize* {aka const long long unsigned int*}' for argument '2' to
'mxArray* mxCreateNumericArray_730(mwSize, const mwSize*, mxClassID, mxComplexity)'
     plhs[0]=mxCreateNumericArray(2,dims,mxINT8_CLASS,mxREAL);
                                                            ^
D:\hxg\mexDGC.cpp:222:61: error: cannot convert 'int*' to 'const mwSize* {aka const long long unsigned int*}' for argument '2' to
'mxArray* mxCreateNumericArray_730(mwSize, const mwSize*, mxClassID, mxComplexity)'
     plhs[0]=mxCreateNumericArray(2,dims,mxUINT8_CLASS,mxREAL);

 

 

    binaryVP_NN.cpp:274:62: error: cannot convert ‘int*’ to ‘const size_t*
    {aka const long unsigned int*}’ for argument ‘2’ to ‘mxArray* mxCreateNumericArray(size_t, const size_t*, mxClassID, mxComplexity)’
         plhs[0]=mxCreateNumericArray(2,dims1,mxINT32_CLASS,mxREAL);

环境:MATLAB2017 g++4.9.3 gcc4.9.3

程序为名称为binaryVP_NN.cpp,执行使用mex binaryVP_NN,显示如上错误,解决方案如下:

执行方式修改为:

mex -DMX_COMPAT_32  -O binaryVP_NN.cpp

如果是多个.cpp文件同时编译,则可以写为:
mex -DMX_COMPAT_32 -O -ID:/hxg D:/hxg/mexDGC.cpp D:/hxg/text.cpp -outdir D:/hxg

 

即使用32位兼容性标志进行执行即可解决。

错误原因可能是因为程序在64位与32位机器之间进行切换,即原来的程序是在32位机器上进行执行的,现在的机器是64位的,故需显示指定。

另外一种可能的解决方案是使用mwSize代替int进行解决。
---------------------
作者:让计算机看懂世界
来源:CSDN
原文:https://blog.csdn.net/yizhang_ml/article/details/86766563
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(环境配置)