關於QGLViewer的一些坑

丁叔叔就是喜歡在代碼前線摸爬滾打,排坑的過程相當痛苦,成果出來的時候有趣而充滿樂趣。有一種:啊,門打開了,可算可以鬆口氣的感覺。

不這樣用成就感麻痹自己的話,哪天真的會打穿電腦的吧……

 

下面是QGLViewer的排坑筆記。

爲毛要搞這個東西呢?因爲是CGAL庫要用。CGAL需要用兩個第三方庫,一個是boost,另一個就是QGLViewer。結果一天下來,CGAL半點沒學,倒是讓我把這個寶貝搗鼓出來了。

本人使用QTCreator作爲編譯工具。版本爲X64、Win8、VS13、QT5.5。請諸位小夥伴們千萬不要搞錯。不同版本的QT要對應好各自的編譯器。

QT5.5的配置不多說了,網上一大堆。裝好後再裝Vsadd-in。這些都是必須的。

然後從官網上下載QGLViewer,傳送門如下:

http://libqglviewer.com/installWindows.html

然後解壓:一開始應該只有這幾個東西:


我們直接打開QGLViewer下的pro進行編譯,我們先不管其他的。


上面這個配置一定要選對哦,不然的話後續是連接不起來的。筆者的是VS3013的64位,沒啥毛病。我們開始編譯,點擊左下角的大錘子開始。不出問題的話就會報下面這些錯誤了:

恩,可以說不出所料,自然不會這麼簡單22333333.

        筆者新加內容:當然,每個人用的每臺機器都不一樣,也許你到這裏沒有出現這些錯誤都是有可能的。這個和具體的每個人的配置不一樣。而且筆者發現,QGLViewer 在QT5.9甚至QT5.6版本都是有問題的,應該就是opengl的配置問題。筆者分別嘗試了用相同方法編譯QGLViewer,分別在QT5.5,QT5.6,QT5.9下進行,環境在筆記本上的Win10和QTCreator。結果只有QT5.5是好用的。所以具體的方法也要你們自己摸索才行,沒有絕對的教程。

還好筆者憑着超級豐富的經驗,當下就判斷出來,這個絕對是opengl庫沒配好。(這他媽的還用你說)哈~哈哈哈~哈哈哈哈哈哈。。。。。

筆者在pro中添加了如下救命代碼,這個代碼曾經解決了筆者的opengl無法使用的問題:

win32-g++:!contains(QMAKE_HOST.arch,x86_64){

    LIBS+="C:/ProgramFiles(x86)/MicrosoftSDKs/Windows/v7.1A/Lib/OpenGL32.lib"

}else{

    LIBS+="C:/ProgramFiles(x86)/MicrosoftSDKs/Windows/v7.1A/Lib/x64/OpenGL32.lib"

}

添加完了之後就長下面這個樣子:

添加完之後還沒完,我們要重新編譯,但是這個時候如果編譯個錘子的話,仍然會報相同的錯誤。其實是QT自己的bug,因爲他不會自動刷新配置。這個時候我們只要將生成的文件刪除然後再編譯個錘子就行了。

圖解見下面:

 

左邊的圖就是你需要刪除的文件,位置就應該在上級目錄,名字的話,每個人都不一樣。

然後我們再重新編譯。這回錯誤少了很多,然而還是沒有過去。

筆者抑制住了打穿電腦的衝動,並開始冷靜地分析。。。。2233333

從上圖看到,這個錯誤仍然是opengl,這幾個函數都是glu打頭的,那麼一定是少了glu庫。而我們剛纔添加的庫是opengl32,那麼在相應目錄下也應該找到glu32纔對!筆者立刻打開相應文件夾來看,果然,兩個都找到了。


好,那接下來我們把這個庫也添加進來唄:

好那麼刪除工程,重新編譯!yes!過了。那麼查看一下生成的文件:



恩,不錯,完好無損。這個QGLViewer編譯成功過後,筆者信心大增。

好嘞,別忘了,把Release和Debug中生成的這幾個文件複製到C:\windows\System32

 

這一步複製非常重要,因爲下面編譯的時候會在這個路徑下尋找這幾個庫。筆者在這中間也是折騰了好久。複製好了因該是上圖這個樣子。

下面編譯這個玩意:designerPlugin,這個東西說白了吧,做成了一個控件,可以在VS編譯器下進行拖放,也就是說可以跟其它Widget一樣可以在窗體設計器中進行設計。真tm的人性化啊。好了我們不爆粗口。

把這個pro打開,哦,發現裏面文件還是挺少的,好嘞,我們先來一波編譯個錘子。同樣的,不是啊麼順利,報的錯誤如下:


仔細一看,還是opengl出了問題,好嘞,繼續剛纔的做法,添加opengl的兩個lib即可,然後刪除生成的文件,重新編譯。

 

誒,過了。非常開心。好嘞,我們先不管這幾個庫,先來跑個example試試。

首先打開一個animation編譯看看,誒,別急,打開之後發現左下角除了錘子都是灰色的,哈?這個什麼鬼?點一下錘子看看,誒,編譯成功了,然而不能運行。。。

這個大概就是解析出了問題。一般來講這個問題,只要我們重新新建一個工程然後拷貝相應的h文件和Cpp文件過去就行了。然後作者抱着嘗試的心態弄了一下,新建了一個工程,向新建工程的pro中添加了一些代碼如下:


其實在這之前比這還做了一件事就是把lib和dll全部拷貝出來放到一個單獨的文件夾中,當然,h文件也拷貝出來了。如下圖所示:

裏面分別裝着:

 

恩,就醬。或者你不想這樣做的話也沒有關係,只要包含相應的lib所在目錄就行了。當然了,由於用到了opengl,你必須在pro中添加剛纔的那兩行救命代碼,還有一些opengl必備的組件才行:

那麼接下來我們編譯然後運行程序:

哎呦呦,出來了。有點小激動。

 

其實有的時候自己也不知道前方的程序會遇到什麼問題,但是隻要洗了功夫,一定可以得到解決。即便是沒有解決,自己也可以通過這些事情鍛鍊解決問題的辦法,這纔是最重要的。

本次編譯過程花費攻共計5個半小時。再加上文檔編寫,一共6個半小時。圓滿成功。當然,前方的路還很長,同志仍需努力。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章