在Windows平台下
在使用MATLAB编译c++源程序,生成相应的格式后,在调用的时候,有的时候会出现这样的错误:Invalid MEX-file ‘C:\Users\zs\Desktop\CSR-DCF\mex\mex_extractforeground.mexw64’: 找不到指定模块
例如:
这时去看源代码,感觉也没有错误。原因在于缺少dll文件,有可能环境变量中没有添加相应的路径。
在VS工程中,当缺少dll文件时系统会报出缺少dll的错误,但是在MATLAB调用c++程序,则会以这个形式报出这个错误。
同样的错误又在vl_feat中出现了一次。再从自己电脑移植到其他电脑的时候,由于vlfeat\toolbox\mex\mexw64目录下面只有msvcr100.dll,在程序运行时出现如下错误:
之后再上述目录下加入msvcr110.dll后,程序正常运行。
ubuntu平台下
这里以ECO的mexResize为例,如果对应的.so文件不对的话,依旧会这样的问题。
注意:由于Matlab2017a支持的gcc/g++版本最高位4.9,这里需要进行一下切换。
在进行mexResize进行混合编译的时候,还是正常可以编译得到mexResize.mexa64文件的,但是在使用的时候会报错。
这是因为在进行函数调用的时候,该函数直接调用的事环境变量里面的libopencv_core.so和libopencv_imgproc.so,而如果已经存在其他版本的opencv的话,会导致无法匹配,会报出Invalid MEX-file ‘/home/zs/Desktop/ECO-master2.0/external_libs/mexResize/mexResize.mexa64’的错误。