OpenGL for Linux

xhSong posted @ 2013年7月30日 20:44 in OpenGL with tags linux OpenGL mesa freeglut gl glut , 8032 阅读

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/

 

  • 无匹配
Avatar_small
依云 说:
2013年7月30日 21:03

为什么用 g++ 来编译 C 代码呢……

Avatar_small
cc 说:
2013年8月01日 21:29

@依云: 可以慢一点编译?:-)

Avatar_small
hustsxh 说:
2013年8月02日 11:04

@依云: g++可以编译c和c++,这样写通用嘛

Avatar_small
依云 说:
2013年8月02日 11:51

@hustsxh: 好像真一样耶~

Avatar_small
hustsxh 说:
2013年8月12日 13:32

不是?求教@依云:

Avatar_small
依云 说:
2013年8月12日 14:52

@hustsxh: 我是说我发现用 g++ 和 gcc 编译 .c 程序的结果确实是一样的。应该是 g++ 看到是 .c 程序所以调用了 cc1 而不是 cc1plus 吧。

Avatar_small
hustsxh 说:
2013年8月14日 16:18

e@依云: 哇,研究这么深入,我是见他们一样,具体为什么我都没有管他

Avatar_small
依云 说:
2013年8月14日 16:55

@hustsxh: 我只是把编译出来的汇编对比了一下啦=w=


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter