TimothyQiu's Blog

keep it simple stupid

MinGW 下编译 freeglut

分类:技术

于是国庆一时兴起决定折腾下 OpenGL 玩玩。

本自然段纯吐槽,欢迎略过:学习 OpenGL 的一大幸事是有诸如 NeHe 这样的大神级教程可以参考,可惜开篇光讲怎么在 Win32 下创建空窗口就讲了洋洋洒洒 14 屏。Win32 API 创建窗口不是问题,问题是一来光空窗口就要这么长的篇幅我实在看不下去,二来他木有讲 Linux 版本的(不过示例代码有 Linux 版本下载)。要说创建窗口什么的简洁和跨平台方便还是 GLUT,而且碰巧 Google 到了 GLUTによる「手抜き」OpenGL入門 这篇,不愧是大学的讲义(?),质量非常不错。GLUT 本身貌似决定停留在这个世纪初了,于是改用 freeglut。Arch 下安装 freeglut 直接 pacman -S freeglut 即可,Windows 下就只得自己下载源码编译了。

README.cygwin_mingw 自带了一段 makefile,不过看起来还是手动 gcc 来得方便。

生成动态链接库

下载最新稳定版本源代码并解压后进入 src 目录,执行:

gcc -O2 -c -DFREEGLUT_EXPORTS *.c -I../include
gcc -shared -o freeglut.dll *.o -Wl,--enable-stdcall-fixup,--out-implib,libfreeglutdll.a -lopengl32 -lglu32 -lgdi32 -lwinmm

生成静态链接库

还是 src 目录,执行:

gcc -O2 -c -DFREEGLUT_STATIC *.c -I../include
ar rcs libfreeglut.a *.o

至此,freeglut 就编译好了。

最后可以把 include/GL 里的头文件扔进 MinGW 的 include/GL 文件夹,libfreeglut.a 和 libfreeglutdll.a 扔进 MinGW 的 lib 文件夹, freeglut.dll 扔进 MinGW 的 bin 文件夹方便使用。

p.s. 最初我是把 libfreeglutdll.a 命名成 libfreeglut.dll.a 的,结果静态链接的时候 -lfreeglut 似乎老是选择 libfreeglut.dll.a 而不是 libfreeglut.a,完全不知道为什么。不过反正 libfreeglutdll.a 也是 freeglut 的 README 里推荐的名字,罢了。

MinGW

添加新评论 »