为自定义 MATLAB 工具箱执行编译器脚本时出错



我想为我遇到的问题提供一步一步的故障排除。 我想在 http://www.cs.man.ac.uk/~gbrown/fstoolbox/中找到的工具箱在 Matlab R2012a 32 位中进行的研究中用于各种用途。 这是我在使用"CompileFeat.m"脚本时在 Matlab 中看到的错误,必须调用该脚本来编译用 C 设计的主要工具箱函数。 当然,我将解压缩的文件夹复制到当前工作路径中,并将所有文件夹添加到当前工作路径中。

>> CompileFEAST
  C:PROGRA~2MATLABR2012ABINMEX.PL: Error: 'FSToolboxMex.c' not found. 
Error using mex (line 206)
Unable to complete successfully.
Error in CompileFEAST (line 3)
mex -I../MIToolbox FSToolboxMex.c BetaGamma.c CMIM.c CondMI.c DISR.c ICAP.c JMI.c
mRMR_D.c ../MIToolbox/MutualInformation.c ../MIToolbox/Entropy.c
../MIToolbox/CalculateProbability.c ../MIToolbox/Arr 

因此,在谷歌上进行了一些挖掘之后,我看到许多建议要求我检查是否安装了编译器。 请参阅下面的代码:

>> mex -setup
Welcome to mex -setup.  This utility will help you set up  
a default compiler.  For a list of supported compilers, see  
http://www.mathworks.com/support/compilers/R2012a/win32.html 
Please choose your compiler for building MEX-files: 
Would you like mex to locate installed compilers [y]/n? y
Select a compiler: 
[1] Lcc-win32 C 2.4.1 in C:PROGRA~2MATLABR2012asyslcc 
[2] Microsoft Software Development Kit (SDK) 7.1 in C:Program Files (x86)Microsoft Visual Studio 10.0 
[0] None 
Compiler: 2
Please verify your choices: 
Compiler: Microsoft Software Development Kit (SDK) 7.1 
Location: C:Program Files (x86)Microsoft Visual Studio 10.0 
Are these correct [y]/n? y
*************************************************************************** 
  Warning: MEX-files generated using Microsoft Windows Software Development  
           Kit (SDK) require that Microsoft Visual Studio 2010 run-time  
           libraries be available on the computer they are run on. 
           If you plan to redistribute your MEX-files to other MATLAB 
           users, be sure that they have the run-time libraries. 
*************************************************************************** 

Trying to update options file: C:UsersJQAppDataRoamingMathWorksMATLABR2012amexopts.bat 
From template:              C:PROGRA~2MATLABR2012abinwin32mexoptsmssdk71opts.bat 
Done . . . 
************************************************************************** 
  Warning: The MATLAB C and Fortran API has changed to support MATLAB 
           variables with more than 2^32-1 elements.  In the near future 
           you will be required to update your code to utilize the new 
           API. You can find more information about this at: 
           http://www.mathworks.com/help/techdoc/matlab_external/bsflnue-1.html 
           Building with the -largeArrayDims option enables the new API. 

完成这一步后,我神奇地希望我对"CompileFeast.m"的下一次调用能够成功。 相反,我收到:

>> CompileFEAST
  C:PROGRA~2MATLABR2012ABINMEX.PL: Error: 'FSToolboxMex.c' not found. 
Error using mex (line 206)
Unable to complete successfully.
Error in CompileFEAST (line 3)
mex -I../MIToolbox FSToolboxMex.c BetaGamma.c CMIM.c CondMI.c DISR.c ICAP.c JMI.c
mRMR_D.c ../MIToolbox/MutualInformation.c ../MIToolbox/Entropy.c
../MIToolbox/CalculateProbability.c ../MIToolbox/Arr 

又是同样的问题! 在进一步挫败调查问题之后,有人建议使用 dir 函数查看文件是否在目录中(它不是),如下所示:

>> dir 'CompileFEAST.m'
CompileFEAST.m not found.

为了确保我可以在我的 Matlab 路径中看到其他文件,我检查另一个函数以查看它是否在目录中:

>> dir 'hurst.m'
hurst.m

如您所见,此文件可在目录中找到。 我只是提供了与将上述工具箱添加到我的 Matlab 工作路径相同的过程,我所做的只是将文件复制到工作路径中并将文件或子文件夹添加到路径中。

有没有人注意到我哪里出错了? 我不太倾向于解决此类问题,我或多或少地使用 Matlab 作为移动模型构建平台来理解算法。

我期待任何评论。

干杯J

我认为您当前的目录(pwd)是错误的。

尝试:

cd('E:SchoolhidethishidethisMATLAB workFEASTFEASTFSToolbox')
CompileFEAST

尽管您可能认为FSToolboxMex.c在您的 MATLAB 路径中,但似乎并非如此。

  • FSToolboxMex.c在哪个目录中?
  • 当前的目录是什么(您从中运行CompileFEAST的目录)?
  • 您的 MATLAB 路径是什么(使用 path 命令)?
  • which -all FSToolboxMex.c返回什么?
  • CompileFEAST的代码是什么样的?

使用"pwd"命令向我表明我与CompileFEAST.m不在同一路径上。 这很简单,只需双击并重新运行脚本即可。 这对我来说可能很尴尬,但至少我已经学会了我的错误! 感谢大家的快速回复,非常感谢!

最好J

最新更新