作者VictorTom (鬼翼&娃娃鱼)
看板C_and_CPP
标题[闲聊] Dev-Cpp 上用 GLUT 跑 OpenGL ....
时间Tue Apr 14 13:57:13 2009
小弟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