OpenGL for Linux
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/
2013年7月30日 21:03
为什么用 g++ 来编译 C 代码呢……
2013年8月01日 21:29
@依云: 可以慢一点编译?:-)
2013年8月01日 21:56
@cc: 233
2013年8月02日 11:04
@依云: g++可以编译c和c++,这样写通用嘛
2013年8月02日 11:51
@hustsxh: 好像真一样耶~
2013年8月12日 13:32
不是?求教@依云:
2013年8月12日 14:52
@hustsxh: 我是说我发现用 g++ 和 gcc 编译 .c 程序的结果确实是一样的。应该是 g++ 看到是 .c 程序所以调用了 cc1 而不是 cc1plus 吧。
2013年8月14日 16:18
e@依云: 哇,研究这么深入,我是见他们一样,具体为什么我都没有管他
2013年8月14日 16:55
@hustsxh: 我只是把编译出来的汇编对比了一下啦=w=
2023年4月23日 14:25
Our team comprises of professional writers & citizen journalists with diverse range of interest in Journalism who are edpost.in passionate about publishing the Education Updates with transparency in general public interest. edpost is a initiative of professional writers who have come together for dedicated news coverage of latest happenings around the country (India). Our team comprises of professional writers & citizen journalists with diverse range of interest in Journalism who are passionate about publishing the Education Updates with transparency in general public interest.