副标题:搭建基于MinGW平台的《OpenGL超级宝典》(OpenGL蓝皮书第5版)GLTools 编译环境。示例代码:Triangle.cpp @ SB5.zip
以下内容以及方法均参考自老外在stackoverflow上的回答,强烈建议看看原文,因为他告诉你解决问题的思路而不只是给你结果
opengl-superbible-5th-edition-set-up-problems
1. 还未安装MinGW的,去官网下一个,我这里用的是第三方的安装包 TDM-GCC 32位下载地址
2. 到 http://freeglut.sourceforge.net/ 下载最新版本的 freeglut,当前版本是freeglut-2.8.1.tar.gz
a. 解压freeglut-2.8.1.tar.gz 得到 freeglut-2.8.1目录,复制到C盘,打开命令行,输入 "cd /d c:\freeglut-2.8.1\src"
b. 执行"gcc -O2 -c -DFREEGLUT_STATIC *.c -I../include"
c. 执行"ar rcs libfreeglut32_static.a *.o" 生成 libfreeglut32_static.a,编译过程可能出现警告,但是只要生成了.a文件,就拿来用吧
d. 在freeglut-2.8.1 目录下建立 lib 文件夹,将生成的 libfreeglut32_static.a 复制进去
3. 到OpenGL超级宝典 官方网站下载源码包 SB5.zip
a. 解压,里面有4个目录,freeglut, linux, visualstudio 以及 src。 进入src,复制GLTools目录到C盘,打开命令行,"cd /d c:\GLTools"
b. 执行 "g++ -c *.cpp -I../include" (和之前freeglut类似,进行编译、链接、生成静态资源库。)
c. 执行 "ar rcs libGLTools.a *.o"
d. 在C:\GLTools下 建立lib目录,将 libGLTools.a 复制进去,即:C:\GLTools\lib\libGLTools.a
e. 同样是在GLTools目录,执行 "g++ -c glew.c -I../include" 然后 "ar rcs libglew.a glew.o" ,复制libglew.a 到 C:\GLTools\lib\目录
照理说这里就已经把所有的静态链接库都生成好了,分别是:
C:\freeglut-2.8.1\lib\libfreeglut32_static.a C:\GLTools\lib\libglew.a C:\GLTools\lib\libGLTools.a
现在尝试编译蓝皮书第二章的示例 Trangle.cpp ,需要把刚生成的3个库文件以及对应目录添加到编译选项中去
写成g++语句会很长,所以写到 Makefile 文件
MAIN = Triangle LIBDIRS = -LC:/freeglut-2.8.1/lib -LC:/GLTools/lib INCDIRS = -IC:/freeglut-2.8.1/include -IC:/GLTools/include CC = g++ LIBS = -lGLTools -lglew -lfreeglut32_static $(MAIN): ${CC} $(INCDIRS) $(CFLAGS) -o ${MAIN} ${MAIN}.c $(LIBDIRS) $(LIBS)
打开命令行,进入相同目录,敲入 mingw32-make
提示:error: ‘GLAPI‘ does not name a type 对不对?参考 [翻译]opengl-superbible-5th-edition-set-up-problems 的方法,在#include <GLTools.h>之后加入 #define GLAPI extern
// Triangle.cpp // Our first OpenGL program that will just draw a triangle on the screen. #include <GLTools.h> // OpenGL toolkit #define GLAPI extern #include <GLShaderManager.h> // Shader Manager Class #ifdef __APPLE__ #include <glut/glut.h> // OS X version of GLUT #else #define FREEGLUT_STATIC #include <GL/glut.h> // Windows FreeGlut equivalent #endif
再次执行mingw32-make ,提示undefined reference to `[email protected]‘,修改Makefile
LIBS 增加 -lopengl32 ,之后编译还会遇到几次类似的函数未定义的问题,找到它们对应的库,
并增加到 LIBS 的链接中去,参考这篇文章:[翻译]opengl-superbible-5th-edition-set-up-problems
最后的Makefile是这样的
MAIN = Triangle LIBDIRS = -LC:/freeglut-2.8.1/lib -LC:/GLTools/lib INCDIRS = -IC:/freeglut-2.8.1/include -IC:/GLTools/include CC = g++ LIBS = -lGLTools -lglew -lfreeglut32_static -lwinmm -lgdi32 -lopengl32 $(MAIN): ${CC} $(INCDIRS) $(CFLAGS) -o ${MAIN} ${MAIN}.c $(LIBDIRS) $(LIBS)
再次执行 mingw32-make ,没有错误提示,看看目录下是否已经生成 Triangle.exe ?
注:以上方法本人在winxp以及WIN7 64位平台均测试过没有问题