在matlab中安装“MatConvNet”中遇到的问题和解决方法:“No supported compiler or SDK was found.”

 

安装环境:win10 x64、matlab 2017a       

MatConvNet是一个运用卷积神经网络解决计算机视觉问题的matlab工具箱,可解决图像分类,分割,面部识别和文本检测等问题。官网地址:http://www.vlfeat.org/matconvnet 。里面有详细的安装教程,函数介绍,已经训练好的模型等。虽然安装过程比较简单,但是还是出现了很多问题,下面就按照安装过程中出现的问题顺序依次阐述。

一 在matlab命令行输入“mex -setup”时出现“No supported compiler or SDK was found.”的问题

在matlab中编译C++程序时,首先需要创建mex file,如果在命令行中输入“mex -setup”时出现“No supported compiler or SDK was found.”说明matlab没有找到你安装的C++编译器的位置或者你未安装C++编译器。如下图所示

在matlab中安装“MatConvNet”中遇到的问题和解决方法:“No supported compiler or SDK was found.”_第1张图片

我的电脑上安装了MinGW,但还是出现了上面的错误提示。开始我以为应该是matlab找不到MinGW,后来尝试了把MinGW的安装路径添加到环境变量中,还是不行。看到提示说“Install MinGW-w64 Compiler”,又尝试安装了MinGW-w64,结果还是不行。经过几次尝试最后通过以下两种方法解决:

 

  • 方法1:在matlab的命令行中输入以下内容:
setenv('MW_MINGW64_LOC', 'D:\Software\MinGW-W64\mingw64')

后面部分是MinGW-w64的安装路径,你选择自己电脑中MinGW-w64的安装路径即可。这种方法的弊端就是每次打开matlab时都要设置一遍路径。下面通过设置系统变量的方法可以达到一劳永逸的效果。

  • 方法2:设置系统变量:

打开计算机的“系统属性”——>"环境变量“,新建一个系统变量,设置变量名为”MW_MINGW64_LOC“,变量值为”D:\Software\MinGW-W64\mingw64“。然后重新启动matlab,此时再输入”mex -setup“,然后选择“mex -setup C++”即可,或者直接输入“mex -setup C++”。

在matlab中安装“MatConvNet”中遇到的问题和解决方法:“No supported compiler or SDK was found.”_第2张图片

如此一来就成功安装了C++编译器。

二 执行“vl_compilenn”时提示无法运行cl.exe文件

出现这个问题说明电脑中未安装Microsoft Visual Studio,安装完后问题自然就解决了。不过相信大部分人应该不会出现这个问题。

在matlab中安装“MatConvNet”中遇到的问题和解决方法:“No supported compiler or SDK was found.”_第3张图片

在Windows下要求安装Visual Studio 2015或者更高版本,于是我安装了Visual Studio 2017

三 运行“vl_compilenn”失败

接着cd 到vl_compilenn文件的路径下,在命令行输入“vl_compilenn”,下面就遇到了花费最多时间解决的问题。部分截图如下,中间省略了很多:

在matlab中安装“MatConvNet”中遇到的问题和解决方法:“No supported compiler or SDK was found.”_第4张图片

……

在matlab中安装“MatConvNet”中遇到的问题和解决方法:“No supported compiler or SDK was found.”_第5张图片

大概就是说在编译vl_compilenn文件时第583行和第492行出现错误。我并没有运行其它的代码,而是直接运行该文件,所以不可能代码出错,要么是该文件本身有错,要么就是编译器的问题。

后来查找了很多资料,众说纷纭,也尝试了很多办法。在GitHub上找了别人修改过的vl_compilenn替换我的文件;重新下载不同版本编译器;通过Matlab官网的地址下载MinGW64等

看到有人用Visual C++编译成功了,就想要不换个编译器试试,但是总觉得问题不在这,因为之前的错误提示就说要用MinGW 64 C++编译,心想官方指定的应该不会错吧。但是也想不出其它方法了,就查了一下支持Matlab 2017a的C++编译器,果然Matlab 2017a不支持Visual Studio 2017,从以下几个方面可以看出:

 

  • vl_compilenn源代码中就指出 MinGW64 编译器不支持,要使用 Visual Studio C++ 编译器。

在matlab中安装“MatConvNet”中遇到的问题和解决方法:“No supported compiler or SDK was found.”_第6张图片

 

  • 在路径“D:\Software\Matlab 2017a\bin\win64\mexopts”下并没有msvcpp2017.xml文件,只包含到msvcpp2015.xml。

 

在matlab中安装“MatConvNet”中遇到的问题和解决方法:“No supported compiler or SDK was found.”_第7张图片

同时还可以看到其它编译器支持的版本。

 

于是卸载Visual Studio 2017,安装Visual Studio 2015,执行以下操作:

1. 在系统变量的Path变量中新建一条路径“C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64”

2. 重启Matlab(Tip:每次更新环境变量后都要重启Matlab)

3. >>mex -setup,此时你的编译器会变成“Microsoft Visual C++ 2015”,同时也可以选择MinGW64 Compiler

在matlab中安装“MatConvNet”中遇到的问题和解决方法:“No supported compiler or SDK was found.”_第8张图片

4. >>mex -setup:'D:\Software\Matlab 2017a\bin\win64\mexopts\msvcpp2015.xml'

在matlab中安装“MatConvNet”中遇到的问题和解决方法:“No supported compiler or SDK was found.”_第9张图片

5. >>vl_compilenn

在matlab中安装“MatConvNet”中遇到的问题和解决方法:“No supported compiler or SDK was found.”_第10张图片

……

至此就成功安装了MatConvNet,可以运行一个“vl_testnn”测试一下。

Reference:

[1] https://github.com/vlfeat/matconvnet/issues/303

[2] https://ww2.mathworks.cn/help/bugfinder/ref/compilercompiler.html

[3] http://www.vlfeat.org/matconvnet/install/

你可能感兴趣的:(学习笔记)