ncnn是騰訊開源的針對手機端的神經網絡前向框架。針對將來可能遇到的手機端實現需求,進行提早了解,並將遇到的一些坑在此記錄。git
首先就是源碼編譯,具體的一些命令參考這裏https://github.com/Tencent/ncnn/wiki/how-to-build#build-for-windows-x64-using-visual-studio-community-2017。在安裝了vs2017後,按win鍵,找到github
vs2017的x64本機工具,並下載須要使用的庫代碼便可,按步驟輸入命令。windows
值得注意的是,編譯過程當中的路徑不要出現空格,不然編譯結果的一些文件會由於空格的存在到別的文件夾中去,致使編譯出現問題。網絡
而後就是若使用vulkan進行編譯時,將SDK中的一些關鍵路徑放在環境變量中,防止編譯過程當中找不到某些文件。框架
不出意外就是成功編譯了,獲得的install文件夾中的include和lib文件夾在後續使用。工具
在vs2017下使用時,若結合opencv進行使用的狀況下,包含頭文件時須要把opencv相關的頭文件放在前面,不然會出現visual-studio
d:\program files\opencv249\build\include\opencv2\core\types_c.h(311): error C2065: 「__m128d」: 未聲明的標識符 1>d:\program files\opencv249\build\include\opencv2\core\types_c.h(311): error C2146: 語法錯誤: 缺乏「;」(在標識符「t」的前面) 1>d:\program files\opencv249\build\include\opencv2\core\types_c.h(311): error C2065: 「t」: 未聲明的標識符 1>d:\program files\opencv249\build\include\opencv2\core\types_c.h(311): error C3861: 「_mm_set_sd」: 找不到標識符 1>d:\program files\opencv249\build\include\opencv2\core\types_c.h(312): error C2065: 「t」: 未聲明的標識符 1>d:\program files\opencv249\build\include\opencv2\core\types_c.h(312): error C3861: 「_mm_cvtsd_si32」: 找不到標識符 1>d:\program files\opencv249\build\include\opencv2\core\types_c.h(346): error C2065: 「__m128d」: 未聲明的標識符 1>d:\program files\opencv249\build\include\opencv2\core\types_c.h(346): error C2146: 語法錯誤: 缺乏「;」(在標識符「t」的前面) 1>d:\program files\opencv249\build\include\opencv2\core\types_c.h(346): error C2065: 「t」: 未聲明的標識符 1>d:\program files\opencv249\build\include\opencv2\core\types_c.h(346): error C3861: 「_mm_set_sd」: 找不到標識符 1>d:\program files\opencv249\build\include\opencv2\core\types_c.h(347): error C2065: 「t」: 未聲明的標識符 1>d:\program files\opencv249\build\include\opencv2\core\types_c.h(347): error C3861: 「_mm_cvtsd_si32」: 找不到標識符 1>d:\program files\opencv249\build\include\opencv2\core\types_c.h(348): error C2065: 「t」: 未聲明的標識符 1>d:\program files\opencv249\build\include\opencv2\core\types_c.h(348): error C3861: 「_mm_cvtsi32_sd」: 找不到標識符 1>d:\program files\opencv249\build\include\opencv2\core\types_c.h(348): error C3861: 「_mm_cmplt_sd」: 找不到標識符 1>d:\program files\opencv249\build\include\opencv2\core\types_c.h(348): error C3861: 「_mm_movemask_pd」: 找不到標識符 1>d:\program files\opencv249\build\include\opencv2\core\types_c.h(363): error C2065: 「__m128d」: 未聲明的標識符 1>d:\program files\opencv249\build\include\opencv2\core\types_c.h(363): error C2146: 語法錯誤: 缺乏「;」(在標識符「t」的前面) 1>d:\program files\opencv249\build\include\opencv2\core\types_c.h(363): error C2065: 「t」: 未聲明的標識符 1>d:\program files\opencv249\build\include\opencv2\core\types_c.h(363): error C3861: 「_mm_set_sd」: 找不到標識符 1>d:\program files\opencv249\build\include\opencv2\core\types_c.h(364): error C2065: 「t」: 未聲明的標識符 1>d:\program files\opencv249\build\include\opencv2\core\types_c.h(364): error C3861: 「_mm_cvtsd_si32」: 找不到標識符 1>d:\program files\opencv249\build\include\opencv2\core\types_c.h(365): error C2065: 「t」: 未聲明的標識符 1>d:\program files\opencv249\build\include\opencv2\core\types_c.h(365): error C3861: 「_mm_cvtsi32_sd」: 找不到標識符 1>d:\program files\opencv249\build\include\opencv2\core\types_c.h(365): error C3861: 「_mm_cmplt_sd」: 找不到標識符 1>d:\program files\opencv249\build\include\opencv2\core\types_c.h(365): error C3861: 「_mm_movemask_pd」: 找不到標識符
而後就是在項目-屬性中配置一下包含目錄和庫目錄,注意選擇的配置類型(Release和Debug)和平臺(x86和x64)ui
而後再VC++目錄-包含目錄和庫目錄中寫入相關庫(opencv,編譯好的ncnn和vulkan)的include目錄和lib目錄,在連接器-輸入-附加依賴項中寫入相關庫(opencv,編譯好的ncnn和vulkan)的lib文件名(注意opencv在Release版本下的lib文件名沒有d)spa
而後運行時的配置和平臺選擇剛剛配置的設置運行便可,ncnn-master下的examples中的squeezenet.cpp是一個例子,將代碼裏面用到的兩個文件一併拷貝便可運行,在此不贅述。.net
-----------------------------
參考資料:
未添加依賴項會出現的錯誤:https://blog.csdn.net/tobefxz/article/details/22154469
ncnn在windows-vs2017下的編譯方法:https://github.com/Tencent/ncnn/wiki/how-to-build#build-for-windows-x64-using-visual-studio-community-2017