OpenGL for Linux
2013年7月30日 20:44
OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言、跨平台的应用程序接口(API)的规格,它用于生成二维、三维图像。
开放源代码库Mesa是一个纯基于软件的图形API,它的代码兼容于OpenGL。但是,由于许可证的原因,它只声称是一个“非常相似”的API。因此Linux要用OpenGL,需要装Mesa和freeglut(为什么叫freeglut?不晓得)
执行下面代码即可安装(实验了很多方法,最后才装上的,不知道这两个够不够)
1 2 | sudo apt-get install freeglut3 freeglut3-dev sudo apt-get install mesa-common-dev mesa-utils |
安装完成后测试下如下的代码(人比较懒,直接到百度了段代码)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #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 后执行如下命令编译程序
1 | gcc a.c -o -lGL -lglut |
如果出现如下错误,说明OpenGL没有装成功
1 2 | a.c:1:21: 致命错误: GL /glut .h:没有那个文件或目录 编译中断。 |
如果出现下面的错误
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /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最后加上如下一行
1 | alias glc= "g++ -lGL -lglut" |
然后编译的时候之需要像gcc/g++那样编译,执行如下代码就ok了
1 | glc a.c -o a |
nice!
PS: 我的系统被我折腾了下,发现前面的东西都装好了,然后又是上面的编译错误。今天终于解决了!解决方案是安装 binutils-gold
1 | sudo apt-get install binutils-gold |
gold是一个正在开发的新的连接器...来自http://packages.ubuntu.com/zh-cn/lucid/binutils-gold。估计是64位ubuntu的原因,装上这个就好了。
另外还找到一个比较好的学习资料,供大家参考http://ogldev.atspace.co.uk/