承續 如何將投影桌面的手指動作轉成touch event 的ToDoList
此篇文章我已經把我遇到的問題跟解法都寫出來了
這份文件我從下載源碼開始有重做過一遍
因此不用質疑可行性
環境跟我不同的人若有問題不要問我
我不會 哈哈哈哈哈
🉐下載源碼 CCV source code
→ 解壓縮CCV源碼
→ 用visual studio 2010 開啟solution檔案
ccv15-master\apps\addonsExamples\VS2010\Community Core Vision.sln
※其實我原本用的vs版本是2017 ,有嘗試想要解決vs2010 project在2017的build error
但發現實在太難搞了,我自認沒能力解決,轉而直接再安裝vs2010
→ Solution Configurations選release mode
→ 開build!! 乖乖攏地咚 有build error (debug build會build成功 但人家我就是要release build!)
→ LINK : fatal error C1047: The object or library file '..\..\..\addons\ofxOsc\libs\oscpack\lib\vs2008\oscpack.lib' was created with an older compiler than other objects; rebuild old objects and libraries
此Error告訴我 大嬸 請用vs2010版的oscpack.lib
→ 修改oscpack.lib的路徑。在solution explorer的project name上面按右鍵 > Properties >看下圖
把2008改成2010 > build
→ Error 爆炸 ! 不過不要驚慌 人擋殺人佛擋殺佛
大嬸來看看,嗯嗯嗯嗯 之乎者也 如此這般
關鍵在此句 mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in main.obj
因為我用release mode去build CCV導致這個ERROR
→ 用vs2010開啟 ccv15-master\libs\openFrameworksCompiled\project\vs2010\openframeworksLib.vcxproj
然後用release mode去build ,這樣就會產生VS2010版 release build的openframeworksLib.lib
→ 修改openframeworksLib.lib的路徑。在CCV的solution explorer的project name上面按右鍵 > Properties >看下圖
把2008改成2010 ,這樣程式執行的時候就會呼叫剛剛build的release版openframeworksLib.lib
→ 再build一次CCV project, 有關於openframeworksLib.lib的error不見了 繼續努力....
→ 用同樣邏輯猜測PocoFoundationmt.lib的error應該也是差不多的error,
所以去把Poco lib的位置改vs2010再build一次
謎之聲:妳唬我啊? 為什麼Poco lib路徑直接改成vs2010就可以用,上面的openframeworksLib要再build一版2010 release mode的
靠杯你以為我吃飽沒事幹啊 自己去看看ccv15-master\libs\openFrameworksCompiled\lib\vs2010\底下原本的lib是什麼 就是沒有release版的我才要自力救濟build一個啊!
poco error 不見了,剩下libcpmtd.lib & ofxDShow.obj ERROR,繼續....
→ libcpmtd.lib不知道是三小,
不過沒關係,上面做設定的時候看到Addtional Library Directories其他部分
很多都還是link到vs2008 folder
我先都改成2010然後再build一次(有相應的vs2010路徑再改,否則會有找不到檔案的error)
→ 改完變這樣,再build一次
→ build error 如下
→ libcpmtd.lib這東東先放一邊,
先看videoInput.lib這個error 其中_ITERATOR_DEBUG_LEVEL的意思為何
_ITERATOR_DEBUG_LEVEL = 0 // disabled (for release builds)
_ITERATOR_DEBUG_LEVEL = 2 // enabled (for debug builds)
我翻譯一下 : 你現在CCV是release build不能呼叫debug mode build出來的videoInput.lib
有關於videoInput.lib的build error是大魔王,我花了很多時間在處理.... 在這邊另闢一區塊專門解決此問題
以下為如何 build出release mode 的videoInput.lib的教學
-----------------------------------------------------------------------------------------------------------------------------
🉐下載videoInput源碼
CCV source code沒有附videoInput源碼,要自己下載
下載還要下載的巧,目前網路流傳兩版
一版從這下載 https://github.com/ofTheo/videoInput 我被這版搞死 弄超久還沒辦法build成功
另一版到這 http://www.muonics.net/school/spring05/videoInput/ (網頁看起來真的很像來亂的)
選 New - videoInput0.1995 lib and src 下載並解壓縮
→ VS2010開啟專案\videoInput0.1995\videoInput0.1995\videoInputSrcAndDemos\VC2008-videoInputcompileAsLib \videoInput.sln
會出現一個視窗,選Finish或Next(照著Default選項一直按下去)都行
→ 用release mode build
→ build error :1>..\libs\videoInput\videoInput.cpp(17): fatal error C1083: Cannot open include file: 'streams.h': No such file or directory
這好解決,streams.h的位置在videoInput0.1995\videoInputSrcAndDemos\libs\DShow\Include
把這個路徑include進來即可
→ build 之後 error又爆炸了,一個一個來解決....
→ C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(290): error C2146: syntax error : missing ';' before identifier 'PVOID64'
解法參考自 https://blog.csdn.net/fuquanjun/article/details/9273529
重點在此: 调整 DirectShow/Include 在 Tools -> Options -> Projects and Solutions -> VC++ Directories -> Show Directories for –> Include Files 中的位置(把它下移到最下面),然后把 Project -> Properties -> Configuration Properties –> C/C++ 中的 Additional Include Directories 里面的内容(../../../../include)删掉,重新编译,PVOID64的错误就会消失
不過在vs2010的介面有點改變
我沒辦法把 DirectShow/Include 的位置放到最後面
因此我用土法煉鋼的方式
把底下紅框的東西再加一次到上面
然後把DirectShow/Include (videoInput0.1995\videoInputSrcAndDemos\libs\DShow\Include)的位置移到最下面
→ build! 剩這兩個error
→ 1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(290): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
解法參考自 https://bbs.csdn.net/topics/240014257
右击工程,选择properties -> configuration properties -> C/C++ -> commandline
在additional options 打入 /wd4430
→ 1>c:\users\gary\desktop\videoinput0.1995\videoinput0.1995\videoinputsrcanddemos\libs\dshow\include\strmif.h : error C4335: Mac file format detected: please convert the source file to either DOS or UNIX format
解法參考自 http://joshchangs.blogspot.com/2015/05/error-c4335-mac-file-format-detected.html
- 點選專案 > 右鍵 > 選擇 Properties
- Configuration Properties > C/C++ > Advanced > Disable Specific Warnings 填入 4335 即可。
→ build! ->剩這個奇怪的error
1>c1xx : fatal error C1083: Cannot open source file: ' ': No such file or directory
無法開啟"空" file ,這三小?
會不會跟路徑太長有關係? 改改看好了
→ 路徑變短了(減少一層目錄),記得要修改上面步驟streams.h的路徑(因為我把路徑寫死) 再build
靠杯 還是一樣的error 1>c1xx : fatal error C1083: Cannot open source file: ' ': No such file or directory
→ 幹 放棄 拿還沒修改過的videoInput源碼從頭開始做一次以上步驟 build成功了!
所以我到現在還不知道上面這個奇怪error的root cause是什麼
→ 還沒完喔,此步沒做,到時候在CCV build的時候會有libcpmtd的error
改變 runtime Library屬性(原本是MT改MD)
→ 還沒完喔,此步沒做,到時候在CCV build的時候會有以下Error
1>ofxDShow.obj : error LNK2001: unresolved external symbol "public: int __thiscall videoInput::getDeviceCount(void)" (?getDeviceCount@videoInput@@QAEHXZ)
把 videoInput sourcecode 的videoinput.h的getdevicecount從private改宣告到public 可解決此問題
最重要的一步來了!!!!!!!!!!!!!!!!!!!!!!!!!!!
此步沒做 build出來的release build videoInput還是會被認為是debug build ,一切就白搭惹
→ 參考自 https://stackoverflow.com/questions/5727815/how-to-set-iterator-debug-level-in-vs2010/34660059
我懶得再重打字 直接貼上重點如下,加完之後重build,水噹噹的videoInput.lib完成囉
Found the solution.
Project Pages / Configuration Properties / C,C++ / Preprocessor / Preprocessor Definitions.
Add "_ITERATOR_DEBUG_LEVEL=0" in there worked.
---------------------------------------------分隔線-----------------------------------------------------------
以上步驟已經build出CCV所需 release mode 的videoInput.lib的教學
現在回來CCV這邊
→ 這是CCV現在的build error,現在先拿build好的videoInput.lib &
videoinput.h(videoInput0.1995\videoInputSrcAndDemos\libs\videoInput\videoinput.h)
替換掉原本CCV source code裡面的
ccv15-master\libs\videoInput\lib\vs2010\videoInput.lib &
ccv15-master\libs\videoInput\include\videoinput.h
(養成好習慣,先將原本的檔案rename,等確定新檔案沒問題再把原檔刪掉,以免無法復原)
然後BUILD CCV ->成功啦!
---------------------------------------------分隔線-----------------------------------------------------------
💠run on visual studio 的error 處理
當我正在慶祝build成功的時候,按下visual studio的Start Debugging鈕
結果竟然出現error!!!!!!!!!!!!!!!!!!!!!!!!! 混蛋加三級啊
又開始debug人生了
→ 這小case ,改一下build file name就可以
把TargetName改成CCV , build
→ 出現底下這個Error Binary was not built with debug information
-
change the project settings so that a Program Database file (PDB) is generated in the release mode.
Now you can generate PDB from the property window...
→ rebuild (一定要rebuild此設定才會有效用)
→ 再次按下visual studio的Start Debugging鈕 ... 三小 為啥cmd視窗一閃而逝就結束了 我看到了什麼?
Output視窗顯示如下 , 拿最後一行去google,大家都說 這樣代表程式結束的好棒棒沒啥問題啊
我聽你們在放屁!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
→ 用另一種方式跑程式 Start Without Debugging ( Ctrl +F5)
看到視窗了 ....等等 是什麼configuration file不讓我loading啊? 喵的又要自力救濟了
→ 先用Error loading configuration file當關鍵字去搜尋整個CCV source code看到底是哪邊吐出來的error吧
→ 開ccv專案打開treeidmap.cpp
→ 讓我簡易修改一下看看到底是什麼file 沒辦法load進來吧,
→ 修改完build,然後用Ctrl+F5執行程式,原來兇手是default.txt,但為什麼+_+
→ 以下debug 心路歷程可跳過
1. 確認直接執行build出的CCV.exe (路徑 : ccv15-master\apps\addonsExamples\VS2010\bin\CCV.exe)是否會有同樣問題
->沒有 , 執行CCV.exe的時候可以看到正常的CCV UI介面
2. 確認CCV.exe有呼叫到這個default.txt -> 我把default.txt rename隨便一個名字,再執行CCV.exe -> cmd視窗有出現error
恩恩 有呼叫到沒錯 否則不會有error
3. default.txt檔案路徑太長嗎? ->也不是, 縮短路徑之後,有一樣的錯誤
4. 打開看default.txt的格式有沒有錯誤->靠杯是天書 我看不出來有沒有錯誤, 但若是有錯誤的話, CCV.exe也有呼叫到此檔
怎沒有error呢? 因此推論default.txt格式沒有問題
5. Visual Studio output視窗出現這句
First-chance exception at 0x0053fc15 in CCV.exe: 0xC0000005: Access violation reading location 0xbaadf039.
靠 到底是誰亂讀不該讀的地方啊
....... (族繁不及備載)
→ 最後,靈光一現,在vs執行程式有問題,但直接執行CCV.exe就沒有問題,會不會只是因為路徑關係所以讀不到default.txt呢?
來把working directory的路徑轉到bin底下吧
步驟
- Go to the project properties (rigth click on the project name in the Solution Explorer, then Properties on the pop up menu).
- Then, under Configuration Properties / Debugging, set Working Directory to $(bin)
→ Ctrl+F5 , 哭了我 終於看到CCV介面了(相機顛倒是因為還沒校正的關係),
找不到default.txt讀為何要秀一個煞有其事的error description讓我debug方向大偏啊
浪費好多時間...
.
.
.
.
.
.
.
.
.
本文結束
留言列表