• 搭建基于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.1src"

        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:GLToolsliblibGLTools.a

        e. 同样是在GLTools目录,执行 "g++ -c glew.c -I../include" 然后 "ar rcs libglew.a glew.o" ,复制libglew.a 到 C:GLToolslib目录

    照理说这里就已经把所有的静态链接库都生成好了,分别是:

        C:freeglut-2.8.1liblibfreeglut32_static.a
        C:GLToolsliblibglew.a
        C:GLToolsliblibGLTools.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位平台均测试过没有问题

  • 相关阅读:
    avcodec_decode_video2少帧问题
    什么是I帧,P帧,B帧
    让Ubuntu可以压缩/解压缩RAR文件
    Linux 向文件末尾追加命令
    valgrind: failed to start tool 'memcheck' for platform 'amd64-linux': No such file or directory
    《王者之剑2》性能数据精讲
    Unity加载模块深度解析(纹理篇)
    Unity加载模块深度解析(Shader)
    Unity加载模块深度解析(网格篇)
    Unity将来时:IL2CPP是什么?
  • 原文地址:https://www.cnblogs.com/paktc/p/3971583.html
Copyright © 2020-2023  润新知