[閒聊] Dev-Cpp 上用 GLUT 跑 OpenGL ....
小弟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
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章