搭建基于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位平台均测试过没有问题

转载于:https://www.cnblogs.com/paktc/p/3971583.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值