我在使用Visual C++ 2010编译第三方库中的C++文件时,在mex中遇到了以下问题。
编译器在多行代码中抱怨以下语句:
plhs[i] = mxCreateNumericMatrix(nclass, 1, mxDOUBLE_CLASS, 0);
使用:
错误 C2664: 'mxCreateNumericMatrix_730': 无法将参数 4 从 'int' 转换为 'mxComplexity'
原因似乎是 mxCreateNumericMatrix
将枚举类型作为第四个输入参数takes,该枚举类型称为 mxComplexity
,定义为 typedef enum mxComplexity {mxREAL=0, mxCOMPLEX};
。换句话说,编译器抱怨它不能隐式地将 int 转换为 枚举类型 。
有趣的是,所涉及的库应该可以轻松编译,而无需对其进行任何更改。
因此,我的问题是:是否有一种方法可以告诉 mex、cl.exe(或者如果我在Unix中执行此操作,则为gcc)进行C风格类型的隐式转换,而不是在每个出现这种情况的行中添加显式转换?注意1:不幸的是,我不知道库是用哪个C++标准编写的。
注意2:如果有关系的话,这是我为mex配置的设置(这是在运行
mex -setup
后由MATLAB默认设置的)。 CompilerExecutable: 'cl'
CompilerFlags: '/c /Zp8 /GR /W3 /EHs /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /nologo /MD'
OptimizationFlags: '/O2 /Oy- /DNDEBUG'
DebugFlags: '/Z7'
LinkerExecutable: 'link'
LinkerFlags: '/dll /export:%ENTRYPOINT% /LIBPATH:"%LIBLOC%" libmx.lib libmex.lib libmat.lib /MACHINE:X64 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /manifest /incremental:NO /implib:"%LIB_NAME%.x" /MAP:"%OUTDIR%%MEX_NAME%%MEX_EXT%.map"'
LinkerOptimizationFlags: ''
LinkerDebugFlags: '/debug /PDB:"%OUTDIR%%MEX_NAME%%MEX_EXT%.pdb"'
mex
对我来说是成功的!) - Amro