close

 

 

 

承續   如何將投影桌面的手指動作轉成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底下吧

     

      步驟

      In Visual Studio 2010:
  1. Go to the project properties (rigth click on the project name in the Solution Explorer, then Properties on the pop up menu).
  2. Then, under Configuration Properties / Debugging, set Working Directory to $(bin)

 

→  Ctrl+F5 , 哭了我  終於看到CCV介面了(相機顛倒是因為還沒校正的關係),

     找不到default.txt讀為何要秀一個煞有其事的error description讓我debug方向大偏啊 

     浪費好多時間...

 

.

.

.

.

.

.

.

.

.

本文結束

 

 

 

 

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 iam9527 的頭像
    iam9527

    翁丸的育兒筆記

    iam9527 發表在 痞客邦 留言(0) 人氣()