OpenGL for Linux

2013年7月30日 20:44

OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言、跨平台的应用程序接口(API)的规格,它用于生成二维、三维图像。

开放源代码库Mesa是一个纯基于软件的图形API,它的代码兼容于OpenGL。但是,由于许可证的原因,它只声称是一个“非常相似”的API。因此Linux要用OpenGL,需要装Mesa和freeglut(为什么叫freeglut?不晓得)

执行下面代码即可安装(实验了很多方法,最后才装上的,不知道这两个够不够)

sudo apt-get install freeglut3 freeglut3-dev
sudo apt-get install mesa-common-dev mesa-utils

安装完成后测试下如下的代码(人比较懒,直接到百度了段代码)

#include <GL/glut.h>
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_POLYGON);
     glVertex2f(-0.5,-0.5);
     glVertex2f(-0.5,0.5);
     glVertex2f(0.5,0.5);
     glVertex2f(0.5,-0.5);
    glEnd();
    glFlush();
}
int main(int argc,char **argv)
{
    glutInit(&argc,argv);
    glutCreateWindow("Hello,world!");
    glutDisplayFunc(display);
    glutMainLoop();
}

将如上代码保存成a.c 后执行如下命令编译程序

gcc a.c -o -lGL -lglut

如果出现如下错误,说明OpenGL没有装成功

a.c:1:21: 致命错误: GL/glut.h:没有那个文件或目录
编译中断。

如果出现下面的错误

/tmp/ccVGAaqV.o: In function `display':
a.c:(.text+0xa): undefined reference to `glClear'
a.c:(.text+0x14): undefined reference to `glBegin'
a.c:(.text+0x29): undefined reference to `glVertex2f'
a.c:(.text+0x3e): undefined reference to `glVertex2f'
a.c:(.text+0x53): undefined reference to `glVertex2f'
a.c:(.text+0x68): undefined reference to `glVertex2f'
a.c:(.text+0x6d): undefined reference to `glEnd'
a.c:(.text+0x72): undefined reference to `glFlush'
/tmp/ccVGAaqV.o: In function `main':
a.c:(.text+0x96): undefined reference to `glutInit'
a.c:(.text+0xa0): undefined reference to `glutCreateWindow'
a.c:(.text+0xad): undefined reference to `glutDisplayFunc'
a.c:(.text+0xb2): undefined reference to `glutMainLoop'
collect2: ld 返回 1

有人说是因为OpenGL没有装好,我又是重装freeglut,又是装各种看起来像的库。最后才发现,原来是没有装显卡驱动,囧囧的。所以你要是遇到相同的问题,先检查下显卡驱动是不是装好了。

搞定,终于可以在Linux下使用OpenGL了。考虑到每次编译带有GL的文件都需要加-lGL -lglut的参数比较麻烦,于是在~/.bashrc最后加上如下一行

alias glc="g++ -lGL -lglut"

然后编译的时候之需要像gcc/g++那样编译,执行如下代码就ok了

glc a.c -o a

nice!

PS: 我的系统被我折腾了下,发现前面的东西都装好了,然后又是上面的编译错误。今天终于解决了!解决方案是安装 binutils-gold

sudo apt-get install binutils-gold

gold是一个正在开发的新的连接器...来自http://packages.ubuntu.com/zh-cn/lucid/binutils-gold。估计是64位ubuntu的原因,装上这个就好了。

另外还找到一个比较好的学习资料,供大家参考http://ogldev.atspace.co.uk/

 

继续阅读