在Windows下写好且编译通过的QtOpenGL程序拿到Ubuntu下编译,如果使用从Ubuntu软件中心中提供的4.6版本的Qt进行编译则完全没有问题,而使用从诺基亚官网上下的4.7版本的QtSDK却总是提示glu库中的相关接口不存在,可是我明明已将GL、GLU等库装好了。这个问题我在好几个机子上都遇见过,通过实验得到以下几种解决方法:
一、 修改makefile文件
某个库的接口不被识别的最可能的原因是没有包含该库的头文件,可以尝试将
#include<GL/glu.h>
加到每一个使用GLU库的CPP文件前,结果发现还是无法使用GLU库,而后发现使用qmake根据 *.pro 生成的 makefile 的 LIBS 这一项中只包含了GL库而没有包含GLU库,这才是症结所在,于是可以简单的将 makefile 中 LIBS 这一项中加入 -lGLU 即可解决这个问题,之后的编译就完全没有问题了。
这种方法实现的前提是在每一个使用GLU库的CPP文件前#include<GL/glu.h>,可以将#include<GL/glu.h>添加到Qt/qgl.h中来避免反复添加。
二、在*.pro文件中注明对GLU库的使用
既然Qt的 makefile 是根据 *.pro 生成的,完全可以通过在 *.pro 添加对GLU库的链接来自动生成链接了GLU库的 makefile 。 *.pro 中通过 LIBS 来标注工程所要链接的库,可以在 *.pro 中加入
LIBS += -lGLU
来指明对GLU库的链接。当然www.linuxidc.com这种方法实现的前提也是在每一个使用GLU库的CPP文件前#include<GL/glu.h>,可以将#include<GL/glu.h>添加到Qt/qgl.h中来避免反复添加。
三、 正确安装相关的OpenGL库
既然Ubuntu 软件中心中提供的4.6版本的Qt下完全不需要如此麻烦地修改相关文件,而且在我的老笔记本电脑上,当时稀里糊涂地装了一大堆GL相关的各种库,结果竟然就不需要再进行以上两步。可见主要问题还是在于GLU库的安装与配置问题,正确地安装和配置相关OpenGL库和Qt才是根本解决之道。
然而说实在具体应该如何配置我现在也不是非常清楚,而Qt已不再是当前的首要学习任务,所以也就未加以深究。等到以后什么时候闲下来把这个问题好好研究一番后再对本文进行进一步完善,因此此处暂且省略若干字。。。