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

时间: 2024-10-06 07:45:36

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

VS2012通过makefile编译OpenGL红宝书的示例代码

> 通过创建新VC项目,然后设置一堆属性,对于懒人来说还是太复杂了.既然它自带了makefile,可以尝试下使用nmake. 需要注意的是VS2012的安装目录里面已经没有GL的头文件和库文件.这个改动应该在VS2010或者更早就已经采用了. 现在有了VS SDK.VS2010自动的SDK目录是C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A,更高的版本可能使用v8.0.v8.0A,反正都在这个目录下面.这个目录下面有include.lib文

YOCTO编译环境的搭建

一.YOCTO编译环境的搭建 参照<freescale_imx6_yocto.pdf>文档P14-P16页构建yocto编译环境.同时可参考https://linux.cn/article-8268-1.html?amputm_medium=rss. 具体操作步骤如下(有些命令需要su权限,视具体情况而定): 以下操作基于ubuntu 16.04 64bit系统,预留至少120G硬盘空间,推荐2G内存. 1.apt-get update 2.apt-get install wget git-c

微信公众平台开发(二) 微信公众平台示例代码分析

原文地址:http://www.cnblogs.com/mchina/archive/2013/06/07/3120592.html 一.摘要 微信公众平台提供了一个简单的php示例代码,在做进一步开发之前,我们有必要将其详细了解一下. 二.获取代码 微信官网:http://mp.weixin.qq.com/mpres/htmledition/res/wx_sample.zip 三.分析代码 完整代码如下: <?php /** * wechat php test */ //define your

在Windows下用Eclipse+CDT+MinGW搭建C++开发平台

本文提供了在Windows下用Eclipse+CDT+MinGW搭建C / C++开发平台的方法, 测试平台为Windows XP Sp2 CHS. 以下软件均为Windows平台下的版本. 1.安装JDK,目的是为了Eclipse的运行.目前版本是jdk-1_5_0_06-windows-i586-p.exe ,下载地址http://java.sun.com/javase/downloads/index.jsp.仅安装JDK即可.假设安装路径为D:\java\JDK.配置系统环境变量(右键点击

DJI IOS开发之三:Step By Step搭建基于DJI Phantom和iOS的计算机视觉及UAV控制开发平台

1 前言 在这之前,世界上有很多研究团队花了大量时间自己造四轴,自己开发硬件,才终于可以研究空中机器人的飞行控制,视觉等方面的问题,了不起在几年前用AR Drone来做.但我们知道AR Drone飞行范围太小,摄像头也很不稳定,因此用AR Drone来做研究有很大的局限性. 现在好了,使用DJI的飞行器,我们轻而易举的拥有了一个非常棒的研究平台,去研究最前沿的问题,或者说最值得去研究的问题,那就是 计算机视觉+机器学习+机器人控制 .把这三个领域结合起来会产生什么令人兴奋的东西呢? 说了一些废话

基于Kafka+ELK搭建海量日志平台

早在传统的单体应用时代,查看日志大都通过SSH客户端登服务器去看,使用较多的命令就是 less 或者 tail.如果服务部署了好几台,就要分别登录到这几台机器上看,等到了分布式和微服务架构流行时代,一个从APP或H5发起的请求除了需要登陆服务器去排查日志,往往还会经过MQ和RPC调用远程到了别的主机继续处理,开发人员定位问题可能还需要根据TraceID或者业务唯一主键去跟踪服务的链路日志,基于传统SSH方式登陆主机查看日志的方式就像图中排查线路的工人一样困难,线上服务器几十上百之多,出了问题难以

搭建基于 Anaconda 管理的多用户 JupyterHub 平台

搭建基于 Anaconda 管理的多用户 JupyterHub 平台 情况:计算工作站放在实验室,多个同学需要接入使用,且需要各自独立的环境,并使用 Jupyter notebook 平台以方便协作. 步骤 1. 安装 Anaconda 由于是多人环境,应调用 root 权限在安装过程中指定安装到 /opt/anaconda/ 路径下,这样所有用户均可读,但无法直接在 base 环境下安装模块. 为了让每个用户都能访问到 conda,需要逐个在用户的 .bashrc 文件中加入 export P

这里整理了基于java平台的常用资源

这里整理了基于java平台的常用资源 翻译 from :akullpp | awesome-java 大家一起学习,共同进步. 如果大家觉得有用,就mark一下,赞一下,或评论一下,让更多的人知道.thanks. 构建 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建.Maven优于Apache Ant.后者采用了一种过程化的方式进行配置,所以维护起来相当困难. Gradle:Gradle采用增量构建.Gra

cocos2dx-2.X前后台切换分析,基于android平台

摘自网上的android生命周期图: cocos2dx-2.X前后台切换分析,基于android平台: 1.从后台进入前台 项目的activity一般继承自Cocos2dxActivity,看过activity生命周期的 都知道onCreate,onResume等方法,这些函数是activity生命周期中 最重要的函数,具体什么时候调用,可以查看相关资料. //刚进入游戏和游戏从后台回到前台会调用 @Override protected void onResume() { super.onRes