1. 程式人生 > >在matlab中安裝“MatConvNet”中遇到的問題和解決方法:“No supported compiler or SDK was found.”

在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++編譯器。

如下圖所示

我的電腦上安裝了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++”。

如此一來就成功安裝了C++編譯器。

二 執行“vl_compilenn”時提示無法執行cl.exe檔案

出現這個問題說明電腦中未安裝Microsoft Visual Studio,安裝完後問題自然就解決了。不過相信大部分人應該不會出現這個問題。

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

三 執行“vl_compilenn”失敗

接著cd 到vl_compilenn檔案的路徑下,在命令列輸入“vl_compilenn”,下面就遇到了花費最多時間解決的問題。部分截圖如下,中間省略了很多:

……

大概就是說在編譯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++ 編譯器。

  • 在路徑“D:\Software\Matlab 2017a\bin\win64\mexopts”下並沒有msvcpp2017.xml檔案,只包含到msvcpp2015.xml。

同時還可以看到其它編譯器支援的版本。

於是解除安裝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

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

5. >>vl_compilenn

……

至此就成功安裝了MatConvNet,可以執行一個“vl_testnn”測試一下。

Reference: