編譯opencv3.2時遇到的問題(VS2015)

本文主要是回顧準備編譯、編譯過程中的感想,並沒有詳細的專業教程提供。
事情開始於做opencv官網一個tutorial——Image Watch: viewing in-memory images in the Visual Studio debugger(自己去找一下吧,寫博文的時候opencv官網一些頁面打不開),要利用VS調試器+ImageWatch插件對圖片的相關細節進行查看。我的opencv庫是自己下載下來解壓的,之前做其他tutorials時感覺還算滿意,心想就這樣一直做下去。誰曾想半路殺出個程咬金,把我對這個庫的美好印象給破壞了。

調試無法通過,無法調出這個ImageWatch,報錯信息是類似“…could not open…pdb file”,就是缺少相應的pdb文件。

在經過一番搜索之後,終於瞭解到pdb文件大概就是在編譯過程中產生的文件,其實在編譯這個tutorial的項目時也產生了一個對應的pdb文件,然而查遍opencv文件夾都沒有找到這樣的文件。額。。。。有網友說,出現這樣的信息可以直接忽略,能正常運行就可以。這樣的話不就是說要放棄調試了?其實我心有不甘啊。

經過一番掙扎,我決定自己編譯一個opencv庫。掙扎是因爲我沒有編譯像opencv這樣的大型代碼的經驗,過程中肯定會遇到很多預料不到、甚至解決不了的問題。更何況我只是業餘的計算機愛好者,基礎有的要補。

我主要參考官網裏面那個Installation by Making Your Own Libraries from the Source Files教程,也就這個寫的最詳細了,雖然就是有點舊,還是2.x版本,VS是2010版。
按照它的要求,準備了各種第三方庫,也不是全部,有些是收費軟件就不要了,有些是鏈接不到,像OpenNi直接轉到蘋果官網去了,坑。。。(最後證明它確實是個坑)
版本不一樣,很多東西都不一樣了,只能是步步爲營了。有些第三方軟件很大,例如編譯Qt5.8,由於硬盤分區本來就小,差點給它爆盤,還好我使用各種騰挪戰術化險爲夷,這個倒是好編譯,照着README步驟來,opencv那個編譯教程也有介紹怎麼編譯qt,只是它是舊版本,跟5.8版本還是差別挺大的,直接的不同就是編譯出來的東西的文件夾格局不一樣。令人疑惑的是編譯之後的一級目錄沒有bin文件夾(在行的人知道怎麼回事嗎?)。而opencv教程要爲qt設置環境變量和系統路徑,這就不好了。我只能是按自己的想法來,找了一個最大的文件夾qtbase,在裏面確實找到一些bin、lib、include之類的文件夾。這個就算搞定了(後來CMake的時候,能檢測到Qt)。

一些比較容易、比較小的庫就不介紹了。

就像剛纔提到的,OpenNi就不好解決,雖然在GitHub上有OpenNi源碼,也有OpenNI Primesense sensor module源碼。這兩個代碼包裏的編譯方式都是要執行一個py腳本,就是這兩個腳本一直不能通過,老是報錯,而且它們都是同樣的錯誤,類似無法找到指定文件、無法獲取註冊值。。。,如下圖,
這裏寫圖片描述

我又開始大海撈針搜索解決辦法,也找到一些可執行文件版本,試了下直接安裝,CMake可以搜索到OpenNI1.5,就差openni primesense sensor module,總是解決不了。這個論壇上一個網友說openni、PrimeSense sensor module都要從源碼安裝我想也是吧,源碼安裝纔有bin、lib、include那些東西?但是那個python報錯確實無法解決。

在網上徘徊的時候找到這篇文章,裏面提到一個細節,如下圖
這裏寫圖片描述
也就是OpenNI1.5源碼可能含有不支持VS2010之後版本編譯器的代碼。文章說要註釋掉那段代碼,但是我還沒有嘗試。爲什麼?原因有幾個。在這之前,其實在做完前面的準備後,我已經編譯了一次opencv,包括rebug和release版本。每個版本都要花上四五個小時(不知道是不是因爲我選的那些第三方庫太多、太大了),我都是趁着晚上這段時間人在的時候讓它編譯,好看着,筆記本發熱。編譯是通過了,但是有warnings和errors,如下圖,
這裏寫圖片描述

雖然是編譯出東西來了,也有pdb文件了,但是這數不清的警告,讓人對這些庫的有效性生疑,以及bin文件裏的文件感覺跟別人編譯的不一樣,沒別人全,可以對比一下,下面上圖是網上人家上傳的庫,下圖是我編譯的,當然還有版本不一樣,這應該不要緊。
這裏寫圖片描述
——————————————
這裏寫圖片描述
明顯就少了好多東西啊。不知道是不是因爲少了OpenNI1.5以及它的sensor module,很有可能。

好了,過去差不多一個星期,每個晚上都花在編譯OpenCV庫上了,沒有專業的指導,最終也沒有做出什麼成果。
值得一提的是,在編譯完之後,我又單獨編譯了OpenCV源碼中的“測試代碼”(這是我在搜索的時候get到的技能,打開工程(項目)屬性,在配置屬性裏面可以查看要編譯的項目,有些項目是默認打上勾的,只有install、install-docs和tests這幾個工程沒有,它們應該不參與最初的編譯,只是參與後處理過程),就是項目名字含有test的,這應該是用來測試編譯成功與否的吧,結果返回錯誤,表示無法open file opencvhighui…。

熬了幾天夜,感覺身體被掏空,脖子背部都很酸。。。

我還是繼續使用官網的opencv庫吧,等實力夠了再回歸這裏。

發佈了6 篇原創文章 · 獲贊 6 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章