ncnn在windows+vs 2017的入門及一些坑


ncnn是騰訊開源的針對手機端的神經網絡前向框架。針對未來可能遇到的手機端實現需求,進行提前了解,並將遇到的一些坑在此記錄。

源碼編譯

首先就是源碼編譯,具體的一些命令參考這里https://github.com/Tencent/ncnn/wiki/how-to-build#build-for-windows-x64-using-visual-studio-community-2017。在安裝了vs2017后,按win鍵,找到

 

 

 vs2017的x64本機工具,並下載需要使用的庫代碼即可,按步驟輸入命令。

值得注意的是,編譯過程中的路徑不要出現空格,否則編譯結果的一些文件會因為空格的存在到別的文件夾中去,導致編譯出現問題。

然后就是若使用vulkan進行編譯時,將SDK中的一些關鍵路徑放在環境變量中,防止編譯過程中找不到某些文件。

 

 

 不出意外就是成功編譯了,得到的install文件夾中的include和lib文件夾在后續使用。

Vs2017下使用

在vs2017下使用時,若結合opencv進行使用的情況下,包含頭文件時需要把opencv相關的頭文件放在前面,否則會出現

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)

然后再VC++目錄-包含目錄和庫目錄中寫入相關庫(opencv,編譯好的ncnn和vulkan)的include目錄和lib目錄,在鏈接器-輸入-附加依賴項中寫入相關庫(opencv,編譯好的ncnn和vulkan)的lib文件名(注意opencv在Release版本下的lib文件名沒有d)

然后運行時的配置和平台選擇剛剛配置的設置運行即可,ncnn-master下的examples中的squeezenet.cpp是一個例子,將代碼里面用到的兩個文件一並拷貝即可運行,在此不贅述。

-----------------------------

參考資料:

未添加依賴項會出現的錯誤: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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM