GTK+的安装
一、所需的源码包
1. GNU make 工具
2. GNU gettext 软件包(当系统上没有 gettext() 函数的时候需要)
3. GNU libiconv 库(当系统上没有 iconv() 函数的时候需要)
4. fontconfig库
fontconfig 是提供系统范围内字体设置,定制和允许应用程序访问的函数库。
5. FreeType库
GTK+(基于DirectFB)的字体绘制是通过pango+freetype+fontconfig三者协作来完成的,
其中, fontconfig负责字体的管理和配置,
freetype负责单个字符的绘制,
pango则完成对文字的排版布局。
Freetype是一个操作字体的函数库,它不但可以处理点阵字体,也可以处理多种矢量字体,
包括truetype字体,为上层应用程序提供了一个统一的调用接口。
6. libpng库
libpng软件包包含 libpng 库,这些库被其他程序用于读写png文件。
PNG 库是用来创立和操作PNG 格式的图形文件.PNG 格式是设计来替代GIF,
它对于更小范围的TIFF(标记图象文件格式)来说,
有了很多的进步和拓展并且减少了关于专利权的麻烦.
7. jpegsrc库
能够使用JPEG算法压缩文件。
8. tiff库
tiff库被很多程序用于读写tiff文件。
9.pkg-config 工具
pkgconfig 包括 pkg-config 程序,用来在编译脚本中向编译器传递头文件包含路径或库文件路径。
对于支持 pkg-config 工具的 GTK+ 及其依赖库来说,库的头文件的搜索路径的设置变成了对 .pc 文件搜索路径的设置。
.pc 文件的搜索路径是通过环境变量 PKG_CONFIG_PATH 来设置的,
pkg-config 将按照设置路径的先后顺序进行搜索,直到找到指定的 .pc 文件为止。
10. GLib 库
GLib是GTK+和GNOME工程的基础底层核心程序库,创建 GDK 和 GTK 应用程序时该库可提供许多有用的定义和函数,
是一个综合用途的实用的轻量级的C程序库,它提供C语言的常用的数据结构的定义、相关的处理函数,有趣而实用的宏,
可移植的封装和一些运行时机能,如事件循环、线程、动态调用、对象系统等的API。
11. ATK 库
ATK 包包含了 ATK 库。ATK是可访问性工具箱(Accessibility Toolkit)的简称。ATK 为所有的GTK2程序提供了解决 Accessibility 需求的框架。
12. Cairo 库
Cairo,是一个跨平台的开放源代码的矢量图形函数库,可以提供高质量的显示和打印输出。Cairo提供一个稳定的用户层API,
它可以提供现代化的图形处理管理能力,如绘制和填充,映射转换,合成(注意,是合成)与改变alpha半透明图像,高真文本显示等等。
能够在不同的媒体上实现相同的输出。
13. Pango 库
Pango 库提供了底层的文本编排绘制生成函数, 一套生成整段文本布局的高层函数和帮助编辑多国文本的函数。
14. GTK+ 库
其中前五项一般比较新的Linux版本中,系统都会自带。需要注意的一个问题是如果GTK的安装路径为/opt/gtk时,
在 PKG_CONFIG_PATH中除了要添加/opt/gtk/lib/pkgconfig之外,还有加上/usr/lib/pkgconfig。
因为安装在系统的库其.pc文件都在/usr/lib/pkgconfig中,想要在安装GTK时用到这些系统自带的库时,必须把路径设置清楚。
在收集安装GTK所需的源码包时最重要,也是最容易忽略的一个问题就是各个包之间版本的匹配问题。
解决这个问题最简单的办法就是登陆GTK+ 的网站
":ftp://ftp.gtk.org/pub/gtk,
在上面下载各种源码包。在这个站点上,每个GTK版本兼容的源码包都放在一个文件夹下。
例如我选择安装GTK v2.6,只要在ftp://ftp.gtk.org/pub/gtk/v2.6中下载各个包即可。
不过选择V2.6要严重注意一个问题,支持GTK V2.6的pango包有两个版本-1.8.0、1.8.1,1.8.0是一个失败的版本,
如果选择它,在安装GTK时找不到pango库。这个版本有bug,只能使用1.8.1版本。
根据依赖关系的要求,库的安装要按照这样的先后顺序进行:GLib、Atk、Cairo、Pango、Gtk+。
另外安装cairo前应该先安装好libpny、fontconfig、freetype这三个包。
二、设置
主要包括对LD_LIBRARY_PATH和PKG_CONFIG_PATH的设置,具体如下:
> export LD_LIBRARY_PATH=/opt/gtk/lib:$LD_LIBRARY_PATH
> export PKG_CONFIG_PATH=/opt/gtk/lib/pkgconfig:$PKG_CONFIG_PATH
容易被人忽略的一点是LD_LIBRARY_PATH和PKG_CONFIG_PATH这两个环境变量只对当前的终端窗口有效。
如果到了没有进行上述设置的终端窗口中,pkg-config 将找不到新安装库的.pc 文件、从而可能使后面进行的安装无法进行。
下面解释下这两个环境变量:
LD_LIBRARY_PATH
Linux环境变量名,该环境变量主要用于指定查找共享库时除了默认路径之外的其他路径。(该路径在默认路径之前查找)
移植程序时的经常碰到需要使用一些特定的动态库,而这些编译好的动态库放在我们自己建立的目录里,这时可以将这些目录设置到LD_LIBRARY_PATH中。
linux的excutable在执行的时候缺省是先搜索/lib和/usr/lib这两个目录,然后按照ld.so.conf里面的配置搜索绝对路径,
linux缺省是不会在当前目录搜索动态库的。
(windows加载动态库的时候,缺省是首先加载本地目录下的动态库,然后再搜索 windows/system和windows/system32目录。)
linux也可以支持“加载当前目录的动态库”。设置方法有以下四种:
1、临时修改,log out之后就失效
在terminal中执行:export LD_LIBRARY_PATH=./
2、让当前帐号以后都优先加载当前目录的动态库
修改~/.bash_profile在文件末尾加上两行: LD_LIBRARY_PATH=./ 和 export LD_LIBRARY_PATH
3、让所有帐号从此都优先加载当前目录的动态库
修改/etc/profile在文件末尾加上两行: LD_LIBRARY_PATH=./ 和 export LD_LIBRARY_PATH
4、将/opt/gtk/lib加入到/etc/ld.so.conf中。
在这里我们采用以上第四种方法。
设置好/etc/ld.so.conf后,在终端运行# ldconfig
它的作用就是将/etc/ld.so.conf列出的路径下的库文件 缓存到/etc/ld.so.cache 以供使用
因此当安装完一些库文件,(例如刚安装好glib),或者修改ld.so.conf增加新的库路径后,需要运行一下/sbin/ldconfig
使所有的库文件都被缓存到ld.so.cache中,如果没做,即使库文件明明就在/usr/lib下的,也是不会被使用的,结果
编译过程中报错,缺少xxx库。
PKG_CONFIG_PATH
用来指定pkg-config用到的pc文件的路径,默认是/usr/lib/pkgconf
ig,pc文件是文本文件,扩展名是.pc,里面定义开发包的安装路径,Libs参数和Cflags参数等等。
设置方法:在终端运行> export PKG_CONFIG_PATH=/opt/gtk/lib/pkgconfig:$PKG_CONFIG_PATH
三、开始安装
把下载好的压缩包都放在root的主目录下。
1.将/opt/gtk/lib加入到/etc/ld.so.conf中
2.> export PKG_CONFIG_PATH=/opt/gtk/lib/pkgconfig:$PKG_CONFIG_PATH
3.> ldconfig
将 GTK+ 及其依赖库设置安装到同一个目录/opt/gtk下、而不是每一个库占用一个不同的目录,可以给以后的库的设置带来方便。
而且,在将来不再需要这个版本的 GTK+ 及其依赖库的时候可以通过删除这个目录将它们简单地去除。
1.安装pkgconfig
> tar zxvf pkg-config-0.23.tar.gz
> cd /root/pkg-config-0.23
> ./configure
> make
> make install
每个过程结束后,都可以用用 echo $? 检查是否执行安装成功。如果输出是 0,说明配置成功;0 之外的数字说明配置失败。
在 Linux 系统上,可以用这个方法检查一个命令或程序在其结束后返回给系统的值是多少。一般 0 代表成功,非 0 表示程序异常退出。
2.安装glib
> tar zjvf glib-2.15.6.tar.bz2
> cd /root/ glib-2.15.6
>./configure --prefix=/opt/gtk
>make
>make install
3.安装atk
> tar zjvf atk-1.21.92.tar.bz2
> cd /root/ atk-1.21.92
>./configure --prefix=/opt/gtk
>make
>make install
4.安装libpny
> tar zjvf libpng-1.2.25.tar.bz2
> cd /root/ libpng-1.2.25
>./configure --prefix=/opt/gtk
>make
>make install
5.安装freetype
> tar xvf freetype-2.3.5.tar.tar
> cd /root/ freetype-2.3.5
>./configure --prefix=/opt/gtk
>make
>make install
6.安装fontconfig
> tar zxvf fontconfig-2.5.0.tar.gz
> cd /root/ fontconfig-2.5.0
>./configure --prefix=/opt/gtk
>make
>make install
7.安装cairo
> tar zxvf cairo-1.4.4.tar.gz
> cd /root/ cairo-1.4.4
>./configure --prefix=/opt/gtk --with-x --enable-win32=no
>make
(注:这个版本的cairo存在bug,
在编译前先要修改/ cairo-1.4.4/src/cairo_type1_subset.c文件,在包含头文件部分,添加“#include <ctype.h>“)
>make install
8.安装Pango
> tar zxvf pango-1.19.4.tar.bz2
> cd /root/ pango-1.19.4
>./configure --prefix=/opt/gtk --libdir=/opt/gtk/lib --with-x
>make
>make install
9.安装libtiff(就是tiff)
> tar xvf tiff-3.8.2.tar.tar
> cd /root/ tiff-3.8.2
> ./configure --prefix=/opt/gtk --noninteractive ¥ --with-DIR_MAN=/opt/gtk/share/man
> make
> make install
10.安装libjpeg(就是jpegsrv)
> tar zxvf jpegsrc.v6b.tar.gz
> cd /root/jpeg-6b
> ./configure --enable-static --enable-shared --prefix=/opt/gtk
> make
> make install
注:jpeg默认不share library,因此要手工指定--enable-shared,一般安装lib时这一点都是要注意的。
11.安装gtk
> tar zjvf gtk+-2.12.8.tar.bz2
> cd /root/ gtk+-2.12.8
> ./configure --prefix=/opt/gtk --with-x --without-libjpeg
> make
> make install
四、检验是否正确安装GTK
为了检验是否正确安装GTK,利用GTK编写一个简单的程序,这个程序创建 200x200 大小的窗口。