[閒聊] Dev-Cpp 上用 GLUT 跑 OpenGL ....

看板C_and_CPP (C/C++)作者 (鬼翼&娃娃魚)時間16年前 (2009/04/14 13:57), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/2 (看更多)
小弟search了一下板上, 似乎沒有完整的介紹, 或遇到小弟的麻煩.... 今天搞了一個早上終於OK了, 貼一下相關資訊看看有沒有板友用得上:) == 環境: XP sp3, Dev-Cpp 4.9.9.2, GLUT 3.7.6, 其他package詳見link.... Dev-Cpp - http://www.bloodshed.net/devcpp.html GLUT for Win - http://www.xmission.com/~nate/glut.html GLUT DevPak - http://www.nigels.com/glt/devpak/ 用到的sample - http://www.songho.ca/opengl/gl_tessellation.html 照google到的資料, 安裝完Dev-Cpp後, 用它的update可以找到相關Pak. 不過小弟試連不上server, 所以另外抓了GLUT DevPak, 點兩下安裝即可. 再把GLUT for Win裡的glut32.dll放到目的.exe或system32的folder下. (順便確認一下GLUT.h放好了, 因為小弟當初流程都混淆了, 懶得回復說) 之後Dev-C++開新的專案, 選到multimedia那一個tab, 就有GL/GLUT可以選. (不然就要自己去搞makefile, 或者去設定project property裡的link library) 裡面還附有sample code, 沒有意外的話, build下去直接就可以run了才對.... == 意外狀況: 1. 小弟抓了網路上OpenGL Tesselation的sample下來build的時候, 遇到類似下面這種奇怪的Linker Error, 有多個不止這一個就是: [Link error]undefined referende to "__glutInitWithExit@12" 解決方法: 在 #include <GL/glut.h> 之前加入一行: #define GLUT_DISABLE_ATEXIT_HACK PS. 這很詭異, 後來build成功以後, 就算拿掉 #define 也重做不出來了.... 2. 同樣是上面的sample code, 在build時還會出現另外一種error: invalid conversion from `void (*)()' to `void (*)()' 加上另一個error在同一行, 但是忘記error message是什麼了. 基本上是有call gluTessCallback() 就會報這行上面這兩個error. 解決方法: 把 (__stdcall*) 全部換成 (CALLBACK*) 就好了. PS. 只是當我build成功後, 改回(__stdcall*)又可以了, 只有用(*)不行. 不過我不明白的是為什麼看起來是同是 void (*)() 卻不能互轉.... 3. 在 #include <GL/glut.h> 和 #include <stdlib.h> 以後有如下的error: error C2381: 'exit' : redefinition; __declspec(noreturn) differs C:\Program Files\Microsoft Visual Studio 8\VC\include\ GL/glut.h(146) : see declaration of 'exit' 解決方法: 把 #include <stdlib.h> 放在 #include <GL/glut.h> 之前.... PS. 這個問題其實是在VC++遇到的, 想說就把它一起列上來reference吧. 詭異的是, 小弟現在的環境又重做不出這個error了, 所以是抓來的. (因為小弟平台上有3~4組IDE環境, 實在懶得去釐清/重做問題了^^||) == 以上, 意外狀況裡有一些case小弟google回來亂試是打通了, 只是倒不是全部明白到底問題是什麼, 以下附上參考資料吧: #1 - http://www.lslnet.com/linux/f/docs1/i47/big5323508.htm #3 - http://social.msdn.microsoft.com/Forums/zh-TW/Vsexpressvc/ thread/4cf463c1-5fee-4daa-b135-be8b06ab7f8f (請接起來) 關於#3裡的討論有一個改preprocessor的方法, 不過當時因為換.h的順序就好了, 所以小弟我沒有仔細研究; 下面還有更古老的討論, 看起來似乎是VC自己的問題: http://www.gamedev.net/community/forums/topic.asp?topic_id=128869 大概就這樣, 在VC下反而還比較簡單, .h/.lib 往 PlatformSDK\ 分類放好, glut32.dll 也是放 system32\ 下; 另外project的linker input加一下就好了. 之前弄Dev-C++時google到說把glut.def或者glut.lib放到Dev-Cpp\lib下. 基本上根本就不work; 這次剛好有需要用到, 所以硬是把Dev-C++弄起來了.... -- 以上~~提供一下今天早上的經驗, 看有沒有板友用得上, 也順便請教"意外狀況"裡遇到的幾個case喵....<(_ _)> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.134.41.4
文章代碼(AID): #19v2MwuH (C_and_CPP)
文章代碼(AID): #19v2MwuH (C_and_CPP)