首页 > 代码库 > 搭建基于MinGW平台的《OpenGL蓝皮书(OpenGL SuperBibe 5th)》示例代码编译环境

搭建基于MinGW平台的《OpenGL蓝皮书(OpenGL SuperBibe 5th)》示例代码编译环境

副标题:搭建基于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 `glViewport@16‘,修改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位平台均测试过没有问题

搭建基于MinGW平台的《OpenGL蓝皮书(OpenGL SuperBibe 5th)》示例代码编译环境