分享

Mingw GLUT OpenGL

 londonKu 2012-04-08

有一次,在别人电脑上发现没有安装开发工具。不想随便在别人机器上装东西,于是,心想,何不在U盘上放一个portable编译工具?在网上搜了搜,发现mingw正合我意,一方面,对linux并不陌生,另一方面,感觉gnu下的编程比较清晰。

一、mingw的安装
mingw的介绍就不多说了,可上mingw主页查看,简单来说就是windows环境下的gnu工具集,其核心是gcc。
http:///projects/mingw/files/可以下载到所需要的软件包。mingw是由其中一些软件包所组装起来的,有一些是必须的组件,有一些是可选的。
在这个网页可以找到安装步骤:http://www./wiki/Getting_Started。简而言之,将必须使用的包下载下来,注意不是源码包,而是二进制文件包,里面应该是已经编译好了的库和程序。这些包包括gcc-core, g++, mingw-runtime, binutils, gcc-objc, gmp, mingw-make, mpfr, win32api, 上述程序包不一定每个都是必须的,但是,我觉得都是有必要的,它们的名字可能有出入,稍微辨认一下就行了。
将这些包解压缩到一个文件中,应该有如下文件夹:info, libexec, man, mingw32, bin, doc, include, lib, share。打开一个cmd,然后,进入bin目录。执行gcc -v,如果无异常,则说明初步安装成功。
再写一个helloworld.c程序,放在根目录下。
bin> gcc -o ../helloworld helloworld.c
bin> ../helloworld
如果都没有错误,则恭喜,你安装成功。
另外,建议mingw-util和mingw-gdb也可尽量安装,特别是gdb, 调试程序时用得到。


二、GLUT的安装
GLUT的介绍也多说,简单来说,就是为快速开发OpenGL而设计的一种图形界面。用glut可以很简单地生成一个窗口,而且专为OpenGL设计。
安装GLUT首先要下载GLUT软件包,我选的3.7.6版本,据说对版本有要求,太旧太新都可能会出问题。里面有glut.h, glut32.lib, glut32.dll三个文件。glut.h置于mingw的include/GL目录下,glut32.lib和glut32.dll可放于工程目录下。

到此,全部安装完毕。
可能有人会问,OpenGL还没安装呢,不必担心,windows支持opengl。只要保证include/GL目录中有gl.h, glu.h就行了。

需要注意的是,c++有两个包,dll和bin,gcc-core也有两个包,mingw-runtime除了dll包之外,还有一个dev包。这些应该都是需要装上的。


安装成功后,运行一个简单的程序测试一下:

#include <GL/glut.h>

void display()
{
glClear(GL_COLOR_BUFFER_BIT);

glBegin(GL_POLYGON);
glVertex2f(-0.5,-0.5);
glVertex2f(-0.5,0.5);
glVertex2f(0.5,0.5);
glVertex2f(0.5,-0.5);
glEnd();

glFlush();
}

int main(int argc,char **argv)
{
glutInit(&argc,argv);
glutCreateWindow("Hello,world!");
glutDisplayFunc(display);
glutMainLoop();
}


保存为glTest.c, 置于mingw根目录下。
bin> set PATH=%cd%;%PATH%
bin> cd ..
mingw> gcc -o ..\glTest glTest.c -D_STDCALL_SUPPORTED -D_M_IX86 glut32.lib -lopengl32 -lglu32
mingw> glTest

如果不出意外,会弹出glut窗口。

需要解释的有三点:
一点是关于-D_STDCALL_SUPPORTED -D_M_IX86,这其实是定义缺少的两个宏,你完全可以在源码中用#define _STDCALL_SUPPORTED
#define _M_IX86
来代替。
第二点是,后面的库glut32.lib,不能使用-lglut32。这是因为mingw内部可能根本没有提供glut32。我们所安装的glut32.lib和glut32.dll属于外部库,要显式地置于工程目录中。在
独木专栏 中有物是-lglut32, 但据称他所使用的mingw提供了glut,这就另当别论了。
第三点是,注意当前目录的概念。上面的编译过程中,我将bin目录加入PATH系统变量,这是很多系统通用的做法。其原因大概就是不要将编译程序所在的目录与当前工程目录弄混了。比如,我将glut32.lib置于工程目录下,如果当前目录不是工程目录,那么就会找不到glut32.lib文件。

参考:
http://blog.csdn.net/fox000002/archive/2008/04/08/2260949.aspx
https://users.cs./bernstdh/web/common/help/cpp_mingw-glut-setup.php
http://www./wiki/IncludePathHOWTO
http://www./wiki/HOWTO_Use_Mark_J_Kilgards_OpenGL_Utility_Toolkit_GLUT_with_MinGW

PS: 原本,我还把mesa包放进去来着,后来发现,暂时没有这个必要。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多