在 Linux 系统上源码安装 GTK+ 2.0

在 Linux 系统上源码安装 GTK+ 2.0
==================================================
Keywords: GTK+, Install, Linux, Source
Author:       whyglinux (whyglinux AT hotmail DOT com)
Date:          2007-01-07
==================================================
目录
0. 前言
1.
二进制安装和源码安装

2.
GTK+ 依赖软件包

3.
查看软件的版本号

4. 安装规划
  4.1 系统上未安装 GTK+
  4.2 系统上已安装 GTK+
5. 软件下载
6. 库的安装
  6.1 安装顺序
  6.2 安装过程
    6.2.1 解包
    6.2.2 配置
    6.2.3 构建
    6.2.4 安装
    6.2.5 设置
      6.2.5.1 搜索路径
      6.2.5.2 编译和链接界面
      6.2.5.3 pkg-config
      6.2.5.4 GTK+ 及其依赖库的设置
        6.2.5.4.1 以编译和链接为目的的设置
        6.2.5.4.2 以链接和执行为目的的设置
  6.3 其它库的安装
    6.3.1 安装 Atk
    6.3.2 安装 Cairo
    6.3.3 安装 Pango
    6.3.4 安装 Gtk+
7. 库的使用
  7.1 库使用以前的设置
  7.2 库文档
0. 前言
GTK+ 2.0 依赖的软件包(程序和库)比较多,版本的更新也比较频繁,因此若是想从 GTK+ 提供的源码软件包中构建一套较新或最新版本的
GTK+
库来使用的话,一般须要首先更新或者安装一系列新版本的依赖程序或库。同时,因为软件包之间存在着依赖关系,对软件包的版本和安装顺序都有必定的要求,一
般还须要对安装后的库进行一些必要的设置才能使用库。于是,能够说源码安装 GTK+ 是一项不小的工程。若是没有源码安装 GTK+
的经验,在安装过程当中很容易遇到一些问题。对于新手来讲,出现了安装问题时却每每不知道如何去解决。
本文试图对 GTK+ 的源码安装提供一套可行的解决方案,介绍一些安装和使用库方面的背景知识,对安装过程当中容易出现问题的地方作了强调说明,以使安装过程可以顺利进行。这样,即便是一个历来没有安装过 GTK+ 的新手也能根据这里的说明顺利地安装上 GTK+。
1. 二进制安装和源码安装
须要首先说明的的是:对于 Linux 系统、特别是较新版本的 Linux 系统来讲,其发行版中已经包含了 GTK+
和全部的支撑软件,通常来讲默认安装后就能够直接使用 GTK+ 了。若是在安装的时候没有选择安装 GTK+,也能够用系统提供的安装工具将
GTK+ 添加到系统中来,或者下载已经编译好的 GTK+ 进行版本升级。
上面的安装方式使用的是已经编译好的软件包。因为这种安装通常会自动解决各个软件包之间的依赖关系,进而安装或者更新相应的软件包,因此与源码安装方式相
比,二进制包的安装节省了编译代码所须要的时间,避免了源码安装的种种繁琐易错之处,对于安装者的要求也较低,所以是安装 GTK+ 的首选方式。
二进制安装方式简单快捷,但也有其力所不及的地方:一般一个软件的二进制包的版本更新要落后于其最新版本,有些软件也可能没有二进制包提供。这样,要使用
最新的版本极可能源码安装就是惟一能够选择的方式了。有时人们也想体验或学习 GTK+
的源码安装方式,毕竟在开源盛世的今天,对于程序员来讲源码安装也是必需要过的一关。
2. GTK+ 依赖软件包
GTK+ 的安装须要下面程序或者库的支持(可在列出的连接中找到各个软件包的下载地址):
php

  • C 编译器(如 GCC。GCC 的网站
    html

  • X 窗口系统库(网站
    linux

  • pkg-config 工具(网站)
    程序员

  • GNU make 工具(网站)
    shell

  • JPEG、PNG 以及 TIFF 图形库(下载页面 的 GTK+ Source 中的 dependencies 目录)
    浏览器

  • FreeType(网站
    安全

  • fontconfig 库(网站
    bash

  • GNU libiconv 库(当系统上没有 iconv() 函数的时候须要)(网站
    网络

  • GNU gettext 软件包(当系统上没有 gettext() 函数的时候须要)([url=http://www.gnu.org/software/gettext/网站[/url])
    函数

  • GLib 库(下载页面 的 GLib Source)

  • ATK 库(下载页面 的 GTK+ Source 中的 dependencies 目录)

  • Cairo 库(下载页面 的 GTK+ Source 中的 dependencies 目录)

  • Pango 库(下载页面 的 Pango Source)

  • GTK+ 库(下载页面 的 GTK+ Source)


目前(写此文时)最新的 GTK+ 是 2.10.6 版,咱们就以这个版本为例介绍。当你看到这篇文章的时候,可能 GTK+ 又有了新的版本,因此要注意下载安装新版本的软件包。
其中,以上 1~9 各项是一些比较通用的软件,和 GTK+ 的关系也没有那么紧密--它们不但被 GTK+ 使用,也被其它程序或者库使用。即便系统上没有安装 GTK+,它们也可能已经在系统中存在了。
10~13 各项和 GTK+ 关系密切,更新也较快,一般一个 GTK+ 的版本会依赖于这些库的一些特定的版本。因为这些缘由,在本文中说明
GTK+ 安装的时候认为 1~9 项已经安装好了,因此只涉及到 10~14 项的安装。也就是说,GTK+ 的安装实际上主要是
GLib、Atk、Cairo、Pango 和 Gtk+ 这五个库的安装。
固然,在你的系统 1~9 各项中也可能存在没有安装的状况,也可能存在因为版本太低从而使 GTK+
不能顺利安装的状况。当遇到这些状况的时候,应该参考各自的网站中的安装说明对软件进行安装或者升级。可使用二进制包直接安装,也可使用源码方式安
装。在本文中对这些软件的安装将再也不叙述。
根据经验,只要系统中已经有了 1~9 各项,并且系统也较新的话,为了安装 GTK+ 通常没有必要把它们都升级到最新版本,除了其中的
pkg-config 工具。pkg-config 的变更较大,新版本的 GTK+ 的安装须要新版 pkg-config
的支持,不然可能会使安装过程失败。所以,要在安装 GTK+ 以前检查 pkg-config
的版本号。若是版本太低,必定要对它进行版本更新。至于 GTK+ 安装时对 pkg-config 的最低版本要求,能够在 GTK+ 下载目录的
dependencies 目录中找到对应的 pkg-config 软件包,从软件包上提供的版本信息中得到确认。
3. 查看软件的版本号
查看已经安装的软件的版本号的目的有二:

  • 检查软件是否存在

  • 得到软件的版本号,从中能够了解软件的新旧程度,是决定软件是否须要更新的依据


软件包大体可分为两种类型:程序和库。类型不一样,查看版本号的方式也不一样。
对于可运行的程序命令来讲,查看版本号的方式是在执行命令后加上 --version 参数。例如,对于 pkg-config 来讲,其过程是这样的:
$ pkg-config --version
上面的“$”符号表示命令行提示符。
注:你如今应该执行上面的命令查看 pkg-config 的版本号,并按照上面所述检查是否符合安装相应的 GTK+ 的最低版本要求。若是不符合要求,在进行下面的 GTK+ 及其依赖库的安装以前应该首先安装和更新 pkg-config。
对于库来讲,若是它支持使用 pkg-config,则可使用 pkg-config 来查看其版本号。例如,对于 GTK+ 2.0 库来讲,能够这样:
$ pkg-config --modversion gtk+-2.0
注:不妨执行上面的命令看看 GTK+ 库是否已经在系统存在了;若是已经存在,注意它的版本号。还能够执行下面的命令查看使用 GTK+ 库时的编译和链接选项:
$ pkg-config --cflags --libs gtk+-2.0
经过显示出来的信息中的 -I 后面的路径能够大致知道 GTK+ 及其依赖库的安装位置。看看它们是否是都位于 /usr 目录下。
4. 安装规划
4.1 系统上未安装 GTK+
经过上面的检查,若是发现系统上没有安装 GTK+,那问题就变得简单了:直接将 GTK+ 及其依赖库安装到 /usr
目录下便可(至于如何把各个库的安装目录设置为 /usr,可参看下面有关的安装说明)。这样作的好处是:因为 /usr
是系统目录,几乎不须要对安装的库进行什么设置就可以立刻使用它们。
/usr 是一个重要的系统目录,应该尽可能避免对这个目录进行写操做。所以,建议源码安装 GTK+ 不要将它安装在 /usr 等系统目录下;可另选择一其它目录(具体参见下面的相关说明)。
4.2 系统上已安装 GTK+
若是系统中已经安装有 GTK+,要安装新版本的 GTK+ 时须要考虑的问题就多一些了。在 Linux 系统上使用的不少软件都是在 GTK+
库的支持下运行的(好比 GNOME 桌面)。若是相关的 GTK+
库发生损坏,或者库的版本发生了变化,轻微的可形成某些程序不能正常运行,严重的可能会给系统运行带来障碍(好比进入不了桌面环境,等等。)
所以,新版本的 GTK+ 的安装应该避免对原来的 GTK+ 形成影响,以保证系统的正常运行。这一点很容易作到:新版 GTK+
的安装目录要避免和已经存在的 GTK+ 的目录一致。好比,若是旧版的 GTK+ 安装在 /usr 目录下,新版 GTK+
在设置安装目录的时候最好就不要设置为 /usr 了。
一些人因为不了解这些状况,或者图方便,直接就把 GTK+ 安装在 /usr 中、从而把原来的 GTK+ 库给替换了。因为 GTK+
及其兼容库版本的变化以及可能在安装过程当中产生的错误,很容易出现上面提到的问题,因此建议在安装新版 GTK+ 时,最好避开旧版 GTK+
所在的目录。
GTK+ 安装在什么目录中为好呢?其实,这没有什么定论,可自行设置安装的目录。不过,通常的源码软件包默认的安装目录是
/usr/local,因此能够把这个目录设置为 GTK+ 的安装目录,也能够是其它你认为合适的目录。在下面的示例安装中,咱们使用的安装目录是
/opt/gtk,GTK+ 及其依赖库都将安装在这个目录下。
将 GTK+ 及其依赖库设置安装到同一个目录下(如 /opt/gtk)、而不是每个库占用一个不一样的目录,能够给之后的库的设置带来方便。并且,在未来再也不须要这个版本的 GTK+ 及其依赖库的时候能够经过删除这个目录(如 /opt/gtk)将它们简单地去除。
和安装到 /usr 目录中不一样,若是将库安装到一个非系统目录中(好比咱们将要使用的 /opt/gtk 目录),只将库安装完成仍是不够的,还必需要进行一些必要的设置才能使用这个新安装好的库。在下面的相关章节中讲对库的设置做具体说明。
5. 软件下载
按照上面“依赖软件包”一节中提供的说明和地址分别下载 GLib、Atk、Cairo、Pango、Gtk+ 这五个库。
在各自的下载目录中,一般列出了各类版本的软件包,并且通常每一个版本都有 .tar.gz 和 .tar.bz2
两种不一样压缩格式。要注意根据各个软件包的版本号或者日期选择一个最新的版本下载,有的库的下载目录下面也用一个 LATEST-xxx
的文件名告诉目前的最新版本是多少。因为 .tar.bz2 压缩格式的文件较小,推荐下载这种软件包;若是没有,再下载 .tar.gz 格式的包。
下面是目前各个库的最新版本的软件包:

  • glib-2.12.5.tar.bz2

  • atk-1.9.1.tar.bz2

  • cairo-1.2.0.tar.gz

  • pango-1.14.8.tar.bz2

  • gtk+-2.10.6.tar.bz2


能够新建一个目录,用于存放以上这些下载的软件包。
因为这些软件包都是使用 GNU Autotools 工具建立的,因此各个软件包的构建和安装界面是相同的,都是 ./configure
&& make && make install。所以,咱们重点介绍 Glib 库的安装,对包括 GTK+
在内的其它库只做简单说明;在安装其它库的时候,可比照 Glib 库的安装过程进行。
6. 库的安装
6.1 安装顺序
根据依赖关系的要求,库的安装要按照这样的前后顺序进行:GLib、Atk、Cairo、Pango、Gtk+。
上述各个库在安装的时候,都会自动检查其依赖的库是否已经正确安装;若是依赖库没有安装,或者安装不成功,或者没有正确进行设置等都会致使安装终止,并显
示出相应的错误提示。不过,只要按照上面的顺序安装各个库,并严格按照下面的步骤操做,通常很容易在不出现任何错误的状况下顺利地完成各个库的安装。
6.2 安装过程
源码安装软件包的过程可划分为如下几个步骤:

  • 解包

  • 配置

  • 构建

  • 安装

  • 设置


下面以 Glib 的安装为例分别具体介绍库安装的各个过程。
6.2.1 解包
解包就是将软件包解压还原的过程。首先要进入软件包所在的目录,根据根据软件包的类型是 .tar.gz 仍是 .tar.bz2,选择相应的解包命令。
.tar.bz2 格式软件包的解压还原:
$ tar xjvf glib-2.12.5.tar.bz2
若是软件包是 .tar.gz 格式的话,应该这样解压还原:
$ tar xzvf glib-2.12.5.tar.gz
上面的解包命令执行以后,会在当前工做目录下生成一个名为 glib-2.12.5 的目录,Glib 软件包的内容都存放在这个目录下。
其它软件包的解包过程与上面相似,只要把上面命令中的软件包名替换便可。各个软件包解包以后生成的目录名通常是将软件包名中的 .tar.bz2 或者 .tar.gz 去除以后的名称,其格式是:库名-版本号。
6.2.2 配置
配置(configure)的目的和结果是得到软件构建和安装所须要的
Makefile。为此,在配置过程当中将对当前系统进行检测,得到程序构建和安装所须要的一些信息并最终记录在 Makefile
中。其中的一些内容也能够经过命令行参数进行指定,好比软件包的安装路径(若是不特地指定安装路径的话,将默认使用 /usr/local
做为安装路径。)
在前面已经规划好了:咱们要将全部的软件包都安装在 /opt/gtk 目录下面,因此能够这样作:
首先进入要安装的软件包目录。例如,若是是 Glib,能够执行 cd glib-2.12.5 命令进入目录。
其次,执行下面的命令进行配置(之后安装的各个软件包的配置命令也是下面的形式):
$ ./configure --prefix=/opt/gtk
其中,configure 是在软件包中包含的一个脚本文件(是由 GNU Autotools 工具产生的),./configure
是执行这个脚本文件,用 --prefix 指明软件包的安装目录。这样,在随后的安装过程当中(make
install)会把相应的文件拷贝到它后面指定的目录下(/opt/gtk)。
注:能够用 ./configure --help 命令查看各个软件包中配置时提供的不一样的参数选项和各个参数的意义。
注:一个库能够有两种存在形态:共享库(.so)和静态库(.a)。对于 GTK+
及其依赖库,在源码安装的时候其默认设置是只生成共享库;若是须要静态库,应该在配置各个软件包的时候分别加上 --enable-static
参数(参见 ./configure --help)。开发 GTK 程序时通常应使用其共享库,可不安装静态库。
因为 Glib 只依赖于一些最基本的系统库,因此在执行配置的过程当中应该不会出现任何问题才是。然而,对于
GTK+和其它依赖库,若是在配置过程当中发现须要的程序或者库不存在,或者版本不符合要求,都会显示相应的错误提示后异常停止配置过程。若是配置不成功,
则不能继续进行下面的程序构建过程。
对新手来讲,他们一般不清楚什么样的配置结果是成功的,什么是失败的。下面提供两种简单的检查配置是否成功的方法:

  • 配置过程当中输出的信息,除了显示在屏幕上以外,还记录在一个名为 config.log 的文件中。检查这个文件中是否有
    configure: exit 0 这样的一句话(通常位于文件的后面部分或者最后一行)。若是是,说明配置成功;若是不是(好比
    configure: exit 1)说明配置过程当中出现了错误,配置失败。

  • 在 ./configure 命令执行完毕后当即执行 echo $? 命令,检查它的输出结果。若是输出是 0,说明配置成功;0
    以外的数字说明配置失败。在 Linux 系统上,能够用这个方法检查一个命令或程序在其结束后返回给系统的值是多少。通常 0 表明成功,非 0
    表示程序异常退出。


6.2.3 构建
从源代码生成程序的过程称为构建(Build)。这里所说的“程序”是一个广义的概念:既能够是其通常意义上的二进制可执行程序(Program),也可
以是一个文本形式的可执行脚本(Script),还能够是库(Library)、头文件(Header)、数据(Data)等等。一个软件包中每每包含以
上一种或者多种形式的程序构建,其中以二进制可执行程序和库最为常见。
对于用编译型语言(如 C 或者 C++)写的程序来讲(GTK+ 和它的一些依赖库就是用 C 语言写成的),软件的构建过程主要是编译和链接的过程。在 Linux 系统上,构建是经过执行 make 命令实现的:
$ make
make 是根据 Makefile 的内容来决定如何构建程序的,而这个 Makefile 就是上面配置的产物。执行 make 命令以后,程序的编译过程就开始了。这是一个比较耗时的过程,特别是对于一些大型的软件包(如 GTK+ 及其依赖库)来讲更是这样。
make 结束后,也能够执行 echo $? 命令检查 make 是否执行成功。通常只要配置经过了,make 应该不会出现什么问题才是。
make 的结果,对于程序来讲,主要生成的是可执行程序文件;对于库来讲,主要生成的是库文件。下面的安装过程将把须要的文件拷贝到在配置时指定的安装目录中去。
6.2.4 安装
构建成功的软件包的安装是经过带 install 参数的 make 进行的:
$ make install
须要在此说明的是:在 Linux 系统,除了 root
用户和具备相应权限的用户以外,通常用户只有在本身的用户目录下才有写权限;对于用户目录以外的其它目录和文件,通常只能读而不能写。咱们在配置的时候将
设置的安装目录是 /opt/gtk,对于通常用户来讲是只读的。若是是这样的话,上面的 make install
虽然被执行,可是因为没有写的权限,不能向这个目录中拷贝文件,因此安装是不成功的。
通常须要以下面这样先切换到 root 用户,而后再进行安装:
$ su
# make install
上面的“#”符号表示处于 root 状态下的命令行提示符。
在执行完 make install 以后,也能够用 echo $? 检查是否执行安装成功。
若是此时查看 /opt/gtk 目录,你会发现这个目录下又有几个子目录,如 bin、include、lib、share。这是由于每一个库(如
Glib)又根据使用目的不一样将安装文件进行了划分:bin 是执行文件目录,include 是头文件目录,lib 是库文件目录,share
是库的公用目录,包括本地翻译文件、各类格式的说明文档和例子程序等。
安装完成后,应该当即退出 root 用户,返回到原来的用户状态:
# exit
root 用户权限应该仅在切实须要的时候才使用。不少初学者不管作什么都是以 root
进行,觉得这样方便。其实对于新手而言这最是要不得,很容易因为误操做而损坏系统。即便只有你一我的使用一个 Linux
系统,也应该注册一个普通用户、平时以一个普通用户的身份使用系统。
6.2.5 设置
新手每每不清楚为何要对库进行设置,要进行什么样的设置。为此,在下面介绍了一些有关库的设置的背景知识。若是已经了解了这部份内容,或者急于进行实际的设置操做,可直接转到最后一小节“GTK+ 及其依赖库的设置”。
6.2.5.1 搜索路径
上面的安装已经把库的各种文件拷贝到指定的安装目录中了,这个库也就能够被其它程序或者库来使用了。库的使用主要包括两方面的内容:对库的头文件的使用以
及对库文件(静态库或共享库)的使用。相应地,库的设置也就是如何对这两类文件进行定位的问题。对文件进行定位一般是用设置文件的搜索路径的方法来解决
的。在使用的过程当中按照搜索路径的前后顺序查找,第一个找到文件将被使用。
库的头文件在程序中被包含使用,并且仅仅用在程序编译阶段,因此头文件的默认搜索路径是由编译器提供的。处于默认搜索路径内的头文件不须要进行搜索路径的
设置便可直接使用。虽然每一个编译器提供的头文件的默认搜索路径不尽相同,可是都把 /usr/include
做为默认的搜索路径之一。使用处于默认搜索路径以外的头文件须要在编译的时候经过编译命令的 -I 参数指定其路径。这是对头文件进行定位的方式。
库文件在链接(静态库和共享库)和运行(仅限于使用共享库的程序)时被使用,其搜索路径是在系统中进行设置的。通常 Linux 系统把 /lib 和
/usr/lib
两个目录做为默认的库搜索路径,因此使用这两个目录中的库时不须要进行设置搜索路径便可直接使用。对于处于默认库搜索路径以外的库,须要将库的位置添加到
库的搜索路径之中。设置库文件的搜索路径有下列两种方式,可任选其一使用:

  • 在环境变量 LD_LIBRARY_PATH 中指明库的搜索路径。

  • 在 /etc/ld.so.conf 文件中添加库的搜索路径。


须要注意的是:第二种搜索路径的设置方式对于程序链接时的库(包括共享库和静态库)的定位已经足够了,可是对于使用了共享库的程序的执行仍是不够的。这是
由于为了加快程序执行时对共享库的定位速度,避免使用搜索路径查找共享库的低效率,因此是直接读取库列表文件 /etc/ld.so.cache
从中进行搜索的。/etc/ld.so.cache 是一个非文本的数据文件,不能直接编辑,它是根据 /etc/ld.so.conf
中设置的搜索路径由 /sbin/ldconfig 命令将这些搜索路径下的共享库文件集中在一块儿而生成的(ldconfig 命令要以 root
权限执行)。所以,为了保证程序执行时对库的定位,在 /etc/ld.so.conf 中进行了库搜索路径的设置以后,还必需要运行
/sbin/ldconfig 命令更新 /etc/ld.so.cache 文件以后才能够。
在程序链接时,对于库文件(静态库和共享库)的搜索路径,除了上面的设置方式以外,还能够经过 -L 参数显式指定。由于用 -L 设置的路径将被优先搜索,因此在链接的时候一般都会以这种方式直接指定要链接的库的路径。
有的使用了共享库的程序,在编译和链接时都很顺利,可是在运行时却发生了找不到共享库的问题,其缘由就是库的搜索路径没有设置,或者设置不正确。
6.2.5.2 编译和链接界面
通常来讲,若是库的头文件不在 /usr/include 目录中,那么在编译的时候须要用 -I
参数指定其路径。因为同一个库在不一样系统上可能位于不一样的目录下,用户安装库的时候也能够将库安装在不一样的目录下,因此即便使用同一个库,因为库的路径的
不一样,形成了用 -I 参数指定的头文件的路径也可能不一样,其结果就是形成了编译命令界面的不统一。若是使用 -L
参数,也会形成链接界面的不统一。编译和链接界面不统一会为库的使用带来麻烦。
为了解决编译和链接界面不统一的问题,人们找到了一些解决办法。其基本思想就是:事先把库的位置信息等保存起来,须要的时候再经过特定的工具将其中有用的
信息提取出来供编译和链接使用。这样,就能够作到编译和链接界面的一致性。其中,目前最为经常使用的库信息提取工具就是下面介绍的 pkg-config。
6.2.5.3 pkg-config
pkg-config 是经过库提供的一个 .pc 文件得到库的各类必要信息的,包括版本信息、编译和链接须要的参数等。这些信息能够经过 pkg-config 提供的参数单独提取出来直接供编译器和链接器使用。
在默认状况下,每一个支持 pkg-config 的库对应的 .pc 文件在安装后都位于安装目录中的 lib/pkgconfig
目录下。例如,咱们在上面已经将 Glib 安装在 /opt/gtk 目录下了,那么这个 Glib 库对应的 .pc 文件是
/opt/gtk/lib/pkgconfig 目录下一个叫 glib-2.0.pc 的文件(不妨看看这个文件的内容来得到对 .pc
文件的一些感性认识。)
使用 pkg-config 的 --cflags 参数能够给出在编译时所须要的选项,而 --libs 参数能够给出链接时的选项。例如,假设一个 sample.c 的程序用到了 Glib 库,就能够这样编译:
$ gcc -c `pkg-config --cflags glib-2.0` sample.c
而后这样链接:
$ gcc sample.o -o sample `pkg-config --libs glib-2.0`
或者上面两步也能够合并为如下一步:
$ gcc sample.c -o sample `pkg-config --cflags --libs glib-2.0`
能够看到:因为使用了 pkg-config 工具来得到库的选项,因此不论库安装在什么目录下,均可以使用相同的编译和链接命令,带来了编译和链接界面的统一。
使用 pkg-config 工具提取库的编译和链接参数有两个基本的前提:

  • 库自己在安装的时候必须提供一个相应的 .pc 文件。不这样作的库说明不支持 pkg-config 工具的使用。

  • pkg-config 必须知道要到哪里去寻找此 .pc 文件。

GTK+ 及其依赖库支持使用 pkg-config 工具,因此剩下的问题就是如何告诉 pkg-config 到哪里去寻找库对应的 .pc 文件,这也是经过设置搜索路径来解决的。 6.2.5.4 GTK+ 及其依赖库的设置6.2.5.4.1 以编译和链接为目的的设置对于支持 pkg-config 工具的 GTK+ 及其依赖库来讲,库的头文件的搜索路径的设置变成了对 .pc 文件搜索路径的设置。.pc文件的搜索路径是经过环境变量 PKG_CONFIG_PATH 来设置的,pkg-config 将按照设置路径的前后顺序进行搜索,直到找到指定的.pc 文件为止。Linux 中环境变量的设置方式和使用的 shell 有关。在这里是以 bash 为例进行说明的。若是你发现这里的环境变量的设置方法不能成功的话,应该检查你在当前的终端中使用的是什么 shell:$ ps --no-headers --format comm $$注:若是 ps 被定义为别名,可能须要执行 \ps --no-headers --format comm $$ 才行。而后根据这种 shell 的环境变量的设置方法进行设置。若是系统中存在有 bash 的话,也能够将 shell 切换为 bash:$ bash这样就能够按照下面介绍的方法设置环境变量了。安装完 Glib 后,在 bash 中应该进行以下设置:$ export PKG_CONFIG_PATH=/opt/gtk/lib/pkgconfig:$PKG_CONFIG_PATH能够执行下面的命令检查是否 /opt/gtk/lib/pkgconfig 路径已经设置在 PKG_CONFIG_PATH 环境变量中:$ echo $PKG_CONFIG_PATH这样设置以后,使用 Glib 库的其它程序或库在编译的时候 pkg-config 就知道首先要到 /opt/gtk/lib/pkgconfig这个目录中去寻找 glib-2.0.pc 了(GTK+ 和其它的依赖库的 .pc 文件也将拷贝到这里,也会首先到这里搜索它们对应的 .pc文件)。以后,经过 pkg-config 就能够把其中库的编译和链接参数提取出来供程序在编译和链接时使用。另外还须要注意的是:环境变量的设置只对当前的终端窗口有效。若是到了没有进行上述设置的终端窗口中,pkg-config 将找不到新安装的 glib-2.0.pc 文件、从而可能使后面进行的安装(如 Glib 以后的 Atk 的安装)没法进行。 6.2.5.4.2 以链接和执行为目的的设置前面已经说明过了,库搜索路径的设置有两种方式:在环境变量 LD_LIBRARY_PATH 中设置以及在 /etc/ld.so.conf 文件中设置。其中,第二种设置方式须要 root 权限,以改变 /etc/ld.so.conf 文件并执行 /sbin/ldconfig命令。并且,当系统从新启动后,全部的基于 GTK2 的程序在运行时都将使用新安装的 GTK+ 库。不幸的是,因为 GTK+版本的改变,这有时会给应用程序带来兼容性的问题,形成某些程序运行不正常。为了不出现上面的这些状况,在 GTK+ 及其依赖库的安装过程当中对于库的搜索路径的设置将采用第一种方式进行。这种设置方式不须要 root 权限,设置也简单:$ export LD_LIBRARY_PATH=/opt/gtk/lib:$LD_LIBRARY_PATH能够用下面的命令查看 LD_LIBRAY_PATH 的设置内容:$ echo $LD_LIBRARY_PATH至此,库的两种设置就完成了。因为咱们将 GTK+ 及其依赖库设置安装在同一目录中,因此上面的对环境变量 PKG_CONFIG_PATH 和 LD_LIBRAY_PATH 的设置在一个终端窗口中只要进行一次就能够了,之后安装其它库的时候不须要再行设置。通过以上设置以后,使用了 Glib 的程序(以下面要安装的 Atk)就可以根据在 PKG_CONFIG_PATH 和LD_LIBRAY_PATH 中设置的搜索路径找到新安装的 Glib 库了。若是不进行上面的设置,或者设置有误,可能找到的是旧版的Glib,也可能出现找不到 Glib 的错误。如今,能够执行下面的命令检查 Glib 的版本号:$ pkg-config --modversion glib-2.0若是显示的版本号和你进行安装的软件包中的版本号一致,那么恭喜你! 你已经成功地完成了 Glib 库的安装和设置,能够继续进行其它库的安装了。注意:Atk 等库的编译会用到 /opt/gtk/bin 中的命令,因此还应该对 PATH 环境变量进行以下设置:$ export PATH=/opt/gtk/bin:$PATH 6.3 其它库的安装在确认已经成功安装了 Glib 以后,能够顺次安装其它的库。6.3.1 安装 Atk参考“安装 Glib”一节中的操做进行。若是始终在同一个终端窗口中操做的话,最后的设置过程可不执行。检查 Atk 的版本号:$ pkg-config --modversion atk6.3.2 安装 Cairo参考“安装 Glib”一节中的操做进行。若是始终在同一个终端窗口中操做的话,最后的设置过程可不执行。检查 Cairo 的版本号:$ pkg-config --modversion cairo6.3.3 安装 Pango参考“安装 Glib”一节中的操做进行。若是始终在同一个终端窗口中操做的话,最后的设置过程可不执行。检查 Pango 的版本号:$ pkg-config --modversion pango注意:配置 Pango 成功的另一个标志是:在 ./configure 最后显示出来的一行信息 backends: FreeType XXft Cairo 中应该有 Cairo 字样的出现。若是没有,好比象 backends: FreeType X Xft 这样,说明Pango 的配置不成功;Pango 配置不成功,说明其依赖库 Cairo 没有安装或者 Cairo 库的设置不正确。6.3.4 安装 Gtk+参考“安装 Glib”一节中的操做进行。若是始终在同一个终端窗口中操做的话,最后的设置过程可不执行。检查 GTK+ 的版本号:$ pkg-config --modversion gtk+-2.07. 库的使用7.1 库使用以前的设置在咱们采用的安装方案中,因为是使用环境变量对 GTK+ 及其依赖库进行的设置,因此当系统从新启动、或者新开一个终端窗口以后,若是想使用新安装的GTK+ 库,须要如上面那样从新设置 PKG_CONFIG_PATH 和 LD_LIBRARY_PATH 环境变量。这种使用 GTK+ 的方法,在使用以前多了一个对库进行设置的过程。虽然显得稍微繁琐了一些,但倒是一种最安全的使用 GTK+ 库的方式,不会对系统上已经存在的使用了 GTK+ 库的程序(好比 GNOME 桌面)带来任何冲击。为了使库的设置变得简单一些,能够把下面的这两句设置保存到一个文件中(好比 set_gtk-2.10 文件):export PKG_CONFIG_PATH=/opt/gtk/lib/pkgconfig:$PKG_CONFIG_PATHexport LD_LIBRARY_PATH=/opt/gtk/lib:$LD_LIBRARY_PATH以后,就能够用下面的方法进行库的设置了(其中的 source 命令也能够用 . 代替):$ source set_gtk-2.10只有在用新版的 GTK+ 库开发应用程序、或者运行使用了新版 GTK+ 库的程序的时候,才有必要进行上述设置。若是想避免使用 GTK+ 库以前上述设置的麻烦,能够把上面两个环境变量的设置在系统的配置文件中(如/etc/profile)或者本身的用户配置文件中(如 ~/.bash_profile) ;库的搜索路径也能够设置在/etc/ld.so.conf 文件中,等等。这种设置在系统启动时会生效,从而会致使使用 GTK+ 的程序使用新版的 GTK+运行库,这有可能会带来一些问题。固然,若是你发现用新版的 GTK+ 代替旧版没有什么问题的话,使用这种设置方式是比较方便的。7.2 库文档使用一个库免不了要参考库的文档。GTK+ 及其依赖库的各个库的参看文档也被安装,具体位置在安装目录的 share/gtk-doc/html 目录下分别存放。能够用浏览器分别打开每一个目录中的 index.html,而后将其添加到网络书签中以便随时参考。(完)

相关文章
相关标签/搜索