编译安装 Mesa (OpenGL)

来源:互联网 发布:收音机mac版 编辑:程序博客网 时间:2024/05/16 06:42

最近因为工作需要,想看一下 OpenGL 的东西,就在笔记本上搭建了 OpenGL 的环境。

1. 下载 Mesa 的源码 MesaLib-8.0.4.tar.bz2

解压后, 运行 configure, 根据提示安装必要的包, 编译,安装

我安装到了 /usr/local/private 下面:

/usr/local/private$ tree ..├── include│   ├── EGL│   │   ├── eglext.h│   │   ├── egl.h│   │   ├── eglmesaext.h│   │   └── eglplatform.h│   ├── GL│   │   ├── glext.h│   │   ├── gl.h│   │   ├── gl_mangle.h│   │   ├── glu.h│   │   ├── glu_mangle.h│   │   ├── glut.h│   │   ├── glxext.h│   │   ├── glx.h│   │   ├── glx_mangle.h│   │   ├── internal│   │   │   └── dri_interface.h│   │   ├── osmesa.h│   │   ├── vms_x_fix.h│   │   ├── wglext.h│   │   └── wmesa.h│   └── KHR│       └── khrplatform.h└── lib    ├── dri    │   ├── i915_dri.so    │   ├── i965_dri.so    │   ├── nouveau_vieux_dri.so    │   ├── r200_dri.so    │   ├── r300_dri.so    │   ├── r600_dri.so    │   ├── radeon_dri.so    │   ├── swrast_dri.so    │   └── vmwgfx_dri.so    ├── libEGL.so -> libEGL.so.1    ├── libEGL.so.1 -> libEGL.so.1.0    ├── libEGL.so.1.0    ├── libGL.so -> libGL.so.1    ├── libGL.so.1 -> libGL.so.1.2    ├── libGL.so.1.2    ├── libGLU.so -> libGLU.so.1    ├── libGLU.so.1 -> libGLU.so.1.3.08000    ├── libGLU.so.1.3.08000    ├── libglut.so -> libglut.so.3    ├── libglut.so.3 -> libglut.so.3.7.1    ├── libglut.so.3.7.1    └── pkgconfig        ├── dri.pc        ├── egl.pc        ├── gl.pc        ├── glu.pc        └── glut.pc8 directories, 45 files

2.下载 GLUT 的源码 MesaGLUT-7.9.2.tar.bz2

因为编译 GLUT 需要使用编译  Mesa 的配置环境,所以,要在 Mesa-7.9.2下建几个链接:

:~/Code/mesa/Mesa-7.9.2$ ls -ltotal 8lrwxrwxrwx 1 charles charles   18 Aug 30 00:26 bin -> ../Mesa-8.0.2/bin/lrwxrwxrwx 1 charles charles   21 Aug 30 00:26 configs -> ../Mesa-8.0.2/configsdrwxrwxr-x 3 charles charles 4096 Aug 30 00:25 includelrwxrwxrwx 1 charles charles   17 Aug 30 00:56 lib -> ../Mesa-8.0.2/libdrwxrwxr-x 3 charles charles 4096 Aug 30 00:25 src
然后即可以编译,但是在生成 lib文件的时候还是报错,说是 gcc 找不到,等等。

经过分析,原因是,有几个  glut的库的变量没有定义,在 src/glut/glx/Makefile 里面加入:

 19 GLUT_LIB=glut 20 GLUT_LIB_NAME = lib$(GLUT_LIB).so 21 GLUT_LIB_GLOB = lib$(GLUT_LIB).*so*
然后就没有问题了。


3. 编译 GLEW.

进入目录, 然后:

~/Code/mesa/glew-1.9.0$ make GLEW_DEST=/usr/local/private
sudo make install GLEW_DEST=/usr/local/private



3. 下载 mesa-demos-8.0.1.tar.bz2

编译 demo 需要 GLEW 库。

glew代码可从 http://glew.sourceforge.net/ 下载到。

我想 把 glew库也放到 /usr/local/private下面,因此,编译代码的时候,执行

~/Code/mesa/glew-1.9.0$ make GLEW_DEST=/usr/local/private
这样,会把指定的路径写到 makefile 和配置文件中, make install 的时候,会把生成的库装到指定的路径。

安装的时候,也要指定安装目录:

:~/Code/mesa/glew-1.9.0$ sudo make GLEW_DEST=/usr/local/private install

4. 编译一个opengl 程序

比如,编译 opengl demo 里面的程序 fire.c, 可用如下的命令:

~/Code/mesa/mesa-demos-8.0.1/src/demos$ gcc fire.c ../util/readtex.c   -o fire  `pkg-config --cflags --libs gl glu glut` -I../util/  -lX11 -lXmu -lm -lXi
其实,还需要先设置一下 pkg-config的路径和 动态库的搜索路径
export PKG_CONFIG_PATH=/usr/local/private/lib/pkgconfig
export LD_LIBRARY_PATH=/usr/local/private/lib/

上面的 lXi 是动态库 /usr/lib/i386-linux-gnu/libXi.so.6,可用如下的方法查询它的信息,先查它属于哪个安装包:

apt-file search  /usr/lib/i386-linux-gnu/libXi.so.6libxi6: /usr/lib/i386-linux-gnu/libXi.so.6libxi6: /usr/lib/i386-linux-gnu/libXi.so.6.1.0libxi6-dbg: /usr/lib/debug/usr/lib/i386-linux-gnu/libXi.so.6.1.0dpkg -S /usr/lib/i386-linux-gnu/libXi.so.6libxi6: /usr/lib/i386-linux-gnu/libXi.so.6
然后查一下这个安装包的信息:

apt-cache show libxi6Package: libxi6Priority: optionalSection: libsInstalled-Size: 141Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>Architecture: i386Source: libxiVersion: 2:1.6.0-0ubuntu2Depends: libc6 (>= 2.4), libx11-6 (>= 2:1.4.99.1), libxext6Pre-Depends: multiarch-supportFilename: pool/main/libx/libxi/libxi6_1.6.0-0ubuntu2_i386.debDescription-en: X11 Input extension library libXi provides an X Window System client interface to the XINPUT extension to the X protocol. . The Input extension allows setup and configuration of multiple input devices, and will soon allow hotplugging of input devices; to be added and removed on the fly. .



原创粉丝点击