亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
123下一頁
最近訪問板塊 發(fā)新帖
查看: 39091 | 回復: 27
打印 上一主題 下一主題

在 Linux 系統(tǒng)上源碼安裝 GTK+ 2.0 [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2007-01-07 23:45 |只看該作者 |倒序瀏覽
==================================================
Keywords: GTK+, Install, Linux, Source
Author:       whyglinux (whyglinux AT hotmail DOT com)
Date:          2007-01-07
==================================================

目錄

0. 前言
1. 二進制安裝和源碼安裝
2. GTK+ 依賴軟件包
3. 查看軟件的版本號
4. 安裝規(guī)劃
  4.1 系統(tǒng)上未安裝 GTK+
  4.2 系統(tǒng)上已安裝 GTK+
5. 軟件下載
6. 庫的安裝
  6.1 安裝順序
  6.2 安裝過程
    6.2.1 解包
    6.2.2 配置
    6.2.3 構(gòu)建
    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 以連接和執(zhí)行為目的的設置
  6.3 其它庫的安裝
    6.3.1 安裝 Atk
    6.3.2 安裝 Cairo
    6.3.3 安裝 Pango
    6.3.4 安裝 Gtk+
7. 庫的使用
  7.1 庫使用之前的設置
  7.2 庫文檔

[ 本帖最后由 whyglinux 于 2007-1-8 00:10 編輯 ]

論壇徽章:
0
2 [報告]
發(fā)表于 2007-01-07 23:47 |只看該作者
0. 前言

GTK+ 2.0 依賴的軟件包(程序和庫)比較多,版本的更新也比較頻繁,所以如果想從 GTK+ 提供的源碼軟件包中構(gòu)建一套較新或最新版本的 GTK+ 庫來使用的話,通常需要首先更新或者安裝一系列新版本的依賴程序或庫。同時,由于軟件包之間存在著依賴關系,對軟件包的版本和安裝順序都有一定的要求,一般還需要對安裝后的庫進行一些必要的設置才能使用庫。因而,可以說源碼安裝 GTK+ 是一項不小的工程。如果沒有源碼安裝 GTK+ 的經(jīng)驗,在安裝過程中很容易遇到一些問題。對于新手來說,出現(xiàn)了安裝問題時卻往往不知道如何去解決。

本文試圖對 GTK+ 的源碼安裝提供一套可行的解決方案,介紹一些安裝和使用庫方面的背景知識,對安裝過程中容易出現(xiàn)問題的地方做了強調(diào)說明,以使安裝過程能夠順利進行。這樣,即使是一個從來沒有安裝過 GTK+ 的新手也能根據(jù)這里的說明順利地安裝上 GTK+。

如果你發(fā)現(xiàn)了本篇中的錯誤,或者對本文有什么感想或者建議,可通過 whyglinux AT hotmail DOT com 郵箱和作者聯(lián)系。

論壇徽章:
0
3 [報告]
發(fā)表于 2007-01-07 23:49 |只看該作者
1. 二進制安裝和源碼安裝

需要首先說明的的是:對于 Linux 系統(tǒng)、特別是較新版本的 Linux 系統(tǒng)來說,其發(fā)行版中已經(jīng)包含了 GTK+ 和所有的支撐軟件,一般來說默認安裝后就可以直接使用 GTK+ 了。如果在安裝的時候沒有選擇安裝 GTK+,也可以用系統(tǒng)提供的安裝工具將 GTK+ 添加到系統(tǒng)中來,或者下載已經(jīng)編譯好的 GTK+ 進行版本升級。

上面的安裝方式使用的是已經(jīng)編譯好的軟件包。由于這種安裝一般會自動解決各個軟件包之間的依賴關系,進而安裝或者更新相應的軟件包,所以與源碼安裝方式相比,二進制包的安裝節(jié)省了編譯代碼所需要的時間,避免了源碼安裝的種種繁瑣易錯之處,對于安裝者的要求也較低,因此是安裝 GTK+ 的首選方式。

二進制安裝方式簡單快捷,但也有其力所不及的地方:通常一個軟件的二進制包的版本更新要落后于其最新版本,有些軟件也可能沒有二進制包提供。這樣,要使用最新的版本很可能源碼安裝就是唯一可以選擇的方式了。有時人們也想體驗或?qū)W習 GTK+ 的源碼安裝方式,畢竟在開源盛世的今天,對于程序員來說源碼安裝也是必須要過的一關。

論壇徽章:
0
4 [報告]
發(fā)表于 2007-01-07 23:50 |只看該作者
2. GTK+ 依賴軟件包

GTK+ 的安裝需要下面程序或者庫的支持(可在列出的鏈接中找到各個軟件包的下載地址):

目前(寫此文時)最新的 GTK+ 是 2.10.6 版,我們就以這個版本為例介紹。當你看到這篇文章的時候,可能 GTK+ 又有了新的版本,所以要注意下載安裝新版本的軟件包。

其中,以上 1~9 各項是一些比較通用的軟件,和 GTK+ 的關系也沒有那么緊密--它們不但被 GTK+ 使用,也被其它程序或者庫使用。即使系統(tǒng)上沒有安裝 GTK+,它們也可能已經(jīng)在系統(tǒng)中存在了。

10~13 各項和 GTK+ 關系密切,更新也較快,通常一個 GTK+ 的版本會依賴于這些庫的一些特定的版本。由于這些原因,在本文中說明 GTK+ 安裝的時候認為 1~9 項已經(jīng)安裝好了,所以只涉及到 10~14 項的安裝。也就是說,GTK+ 的安裝實際上主要是 GLib、Atk、Cairo、Pango 和 Gtk+ 這五個庫的安裝。

當然,在你的系統(tǒng) 1~9 各項中也可能存在沒有安裝的情況,也可能存在由于版本過低從而使 GTK+ 不能順利安裝的情況。當遇到這些情況的時候,應該參考各自的網(wǎng)站中的安裝說明對軟件進行安裝或者升級。可以使用二進制包直接安裝,也可以使用源碼方式安裝。在本文中對這些軟件的安裝將不再敘述。

根據(jù)經(jīng)驗,只要系統(tǒng)中已經(jīng)有了 1~9 各項,而且系統(tǒng)也較新的話,為了安裝 GTK+ 一般沒有必要把它們都升級到最新版本,除了其中的 pkg-config 工具。pkg-config 的變動較大,新版本的 GTK+ 的安裝需要新版 pkg-config 的支持,否則可能會使安裝過程失敗。因此,要在安裝 GTK+ 之前檢查 pkg-config 的版本號。如果版本過低,一定要對它進行版本更新。至于 GTK+ 安裝時對 pkg-config 的最低版本要求,可以在 GTK+ 下載目錄的 dependencies 目錄中找到對應的 pkg-config 軟件包,從軟件包上提供的版本信息中獲得確認。

論壇徽章:
0
5 [報告]
發(fā)表于 2007-01-07 23:52 |只看該作者
3. 查看軟件的版本號

查看已經(jīng)安裝的軟件的版本號的目的有二:
  • 檢查軟件是否存在
  • 獲得軟件的版本號,從中可以了解軟件的新舊程度,是決定軟件是否需要更新的依據(jù)

軟件包大致可分為兩種類型:程序和庫。類型不同,查看版本號的方式也不同。

對于可運行的程序命令來說,查看版本號的方式是在執(zhí)行命令后加上 --version 參數(shù)。例如,對于 pkg-config 來說,其過程是這樣的:

$ pkg-config --version

上面的“$”符號表示命令行提示符。

注:你現(xiàn)在應該執(zhí)行上面的命令查看 pkg-config 的版本號,并按照上面所述檢查是否符合安裝相應的 GTK+ 的最低版本要求。如果不符合要求,在進行下面的 GTK+ 及其依賴庫的安裝之前應該首先安裝和更新 pkg-config。

對于庫來說,如果它支持使用 pkg-config,則可以使用 pkg-config 來查看其版本號。例如,對于 GTK+ 2.0 庫來說,可以這樣:

$ pkg-config --modversion gtk+-2.0

注:不妨執(zhí)行上面的命令看看 GTK+ 庫是否已經(jīng)在系統(tǒng)存在了;如果已經(jīng)存在,注意它的版本號。還可以執(zhí)行下面的命令查看使用 GTK+ 庫時的編譯和連接選項:

$ pkg-config --cflags --libs gtk+-2.0

通過顯示出來的信息中的 -I 后面的路徑可以大體知道 GTK+ 及其依賴庫的安裝位置?纯此鼈兪遣皇嵌嘉挥 /usr 目錄下。

論壇徽章:
0
6 [報告]
發(fā)表于 2007-01-07 23:53 |只看該作者
4. 安裝規(guī)劃

4.1 系統(tǒng)上未安裝 GTK+

通過上面的檢查,如果發(fā)現(xiàn)系統(tǒng)上沒有安裝 GTK+,那問題就變得簡單了:直接將 GTK+ 及其依賴庫安裝到 /usr 目錄下即可(至于如何把各個庫的安裝目錄設置為 /usr,可參看下面有關的安裝說明)。這樣做的好處是:由于 /usr 是系統(tǒng)目錄,幾乎不需要對安裝的庫進行什么設置就能夠馬上使用它們。

/usr 是一個重要的系統(tǒng)目錄,應該盡量避免對這個目錄進行寫操作。因此,建議源碼安裝 GTK+ 不要將它安裝在 /usr 等系統(tǒng)目錄下;可另選擇一其它目錄(具體參見下面的相關說明)。

4.2 系統(tǒng)上已安裝 GTK+

如果系統(tǒng)中已經(jīng)安裝有 GTK+,要安裝新版本的 GTK+ 時需要考慮的問題就多一些了。在 Linux 系統(tǒng)上使用的很多軟件都是在 GTK+ 庫的支持下運行的(比如 GNOME 桌面)。如果相關的 GTK+ 庫發(fā)生損壞,或者庫的版本發(fā)生了變化,輕微的可造成某些程序不能正常運行,嚴重的可能會給系統(tǒng)運行帶來障礙(比如進入不了桌面環(huán)境,等等。)

因此,新版本的 GTK+ 的安裝應該避免對原來的 GTK+ 造成影響,以保證系統(tǒng)的正常運行。這一點很容易做到:新版 GTK+ 的安裝目錄要避免和已經(jīng)存在的 GTK+ 的目錄一致。比如,如果舊版的 GTK+ 安裝在 /usr 目錄下,新版 GTK+ 在設置安裝目錄的時候最好就不要設置為 /usr 了。

一些人由于不了解這些情況,或者圖方便,直接就把 GTK+ 安裝在 /usr 中、從而把原來的 GTK+ 庫給替換了。由于 GTK+ 及其兼容庫版本的變化以及可能在安裝過程中產(chǎn)生的錯誤,很容易出現(xiàn)上面提到的問題,所以建議在安裝新版 GTK+ 時,最好避開舊版 GTK+ 所在的目錄。

GTK+ 安裝在什么目錄中為好呢?其實,這沒有什么定論,可自行設置安裝的目錄。不過,一般的源碼軟件包默認的安裝目錄是 /usr/local,所以可以把這個目錄設置為 GTK+ 的安裝目錄,也可以是其它你認為合適的目錄。在下面的示例安裝中,我們使用的安裝目錄是 /opt/gtk,GTK+ 及其依賴庫都將安裝在這個目錄下。

將 GTK+ 及其依賴庫設置安裝到同一個目錄下(如 /opt/gtk)、而不是每一個庫占用一個不同的目錄,可以給以后的庫的設置帶來方便。而且,在將來不再需要這個版本的 GTK+ 及其依賴庫的時候可以通過刪除這個目錄(如 /opt/gtk)將它們簡單地去除。

和安裝到 /usr 目錄中不同,如果將庫安裝到一個非系統(tǒng)目錄中(比如我們將要使用的 /opt/gtk 目錄),只將庫安裝完成還是不夠的,還必須要進行一些必要的設置才能使用這個新安裝好的庫。在下面的相關章節(jié)中講對庫的設置作具體說明。

論壇徽章:
0
7 [報告]
發(fā)表于 2007-01-07 23:56 |只看該作者
5. 軟件下載

按照上面“依賴軟件包”一節(jié)中提供的說明和地址分別下載 GLib、Atk、Cairo、Pango、Gtk+ 這五個庫。

在各自的下載目錄中,通常列出了各種版本的軟件包,而且一般每個版本都有 .tar.gz 和 .tar.bz2 兩種不同壓縮格式。要注意根據(jù)各個軟件包的版本號或者日期選擇一個最新的版本下載,有的庫的下載目錄下面也用一個 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 工具創(chuàng)建的,所以各個軟件包的構(gòu)建和安裝界面是相同的,都是 ./configure && make && make install。因此,我們重點介紹 Glib 庫的安裝,對包括 GTK+ 在內(nèi)的其它庫只作簡單說明;在安裝其它庫的時候,可比照 Glib 庫的安裝過程進行。

論壇徽章:
0
8 [報告]
發(fā)表于 2007-01-07 23:57 |只看該作者
6. 庫的安裝

6.1 安裝順序

根據(jù)依賴關系的要求,庫的安裝要按照這樣的先后順序進行:GLib、Atk、Cairo、Pango、Gtk+。

上述各個庫在安裝的時候,都會自動檢查其依賴的庫是否已經(jīng)正確安裝;如果依賴庫沒有安裝,或者安裝不成功,或者沒有正確進行設置等都會導致安裝終止,并顯示出相應的錯誤提示。不過,只要按照上面的順序安裝各個庫,并嚴格按照下面的步驟操作,一般很容易在不出現(xiàn)任何錯誤的情況下順利地完成各個庫的安裝。

6.2 安裝過程

源碼安裝軟件包的過程可劃分為以下幾個步驟:
  • 解包
  • 配置
  • 構(gòu)建
  • 安裝
  • 設置

下面以 Glib 的安裝為例分別具體介紹庫安裝的各個過程。

6.2.1 解包

解包就是將軟件包解壓還原的過程。首先要進入軟件包所在的目錄,根據(jù)根據(jù)軟件包的類型是 .tar.gz 還是 .tar.bz2,選擇相應的解包命令。

.tar.bz2 格式軟件包的解壓還原:

$ tar xjvf glib-2.12.5.tar.bz2

如果軟件包是 .tar.gz 格式的話,應該這樣解壓還原:

$ tar xzvf glib-2.12.5.tar.gz

上面的解包命令執(zhí)行之后,會在當前工作目錄下生成一個名為 glib-2.12.5 的目錄,Glib 軟件包的內(nèi)容都存放在這個目錄下。

其它軟件包的解包過程與上面類似,只要把上面命令中的軟件包名替換即可。各個軟件包解包之后生成的目錄名一般是將軟件包名中的 .tar.bz2 或者 .tar.gz 去除之后的名稱,其格式是:庫名-版本號。

6.2.2 配置

配置(configure)的目的和結(jié)果是獲得軟件構(gòu)建和安裝所需要的 Makefile。為此,在配置過程中將對當前系統(tǒng)進行檢測,獲得程序構(gòu)建和安裝所需要的一些信息并最終記錄在 Makefile 中。其中的一些內(nèi)容也可以通過命令行參數(shù)進行指定,比如軟件包的安裝路徑(如果不特意指定安裝路徑的話,將默認使用 /usr/local 作為安裝路徑。)

在前面已經(jīng)規(guī)劃好了:我們要將所有的軟件包都安裝在 /opt/gtk 目錄下面,所以可以這樣做:

首先進入要安裝的軟件包目錄。例如,如果是 Glib,可以執(zhí)行 cd glib-2.12.5 命令進入目錄。

其次,執(zhí)行下面的命令進行配置(以后安裝的各個軟件包的配置命令也是下面的形式):

$ ./configure --prefix=/opt/gtk

其中,configure 是在軟件包中包含的一個腳本文件(是由 GNU Autotools 工具產(chǎn)生的),./configure 是執(zhí)行這個腳本文件,用 --prefix 指明軟件包的安裝目錄。這樣,在隨后的安裝過程中(make install)會把相應的文件拷貝到它后面指定的目錄下(/opt/gtk)。

注:可以用 ./configure --help 命令查看各個軟件包中配置時提供的不同的參數(shù)選項和各個參數(shù)的意義。

注:一個庫可以有兩種存在形態(tài):共享庫(.so)和靜態(tài)庫(.a)。對于 GTK+ 及其依賴庫,在源碼安裝的時候其默認設置是只生成共享庫;如果需要靜態(tài)庫,應該在配置各個軟件包的時候分別加上 --enable-static 參數(shù)(參見 ./configure --help)。開發(fā) GTK 程序時一般應使用其共享庫,可不安裝靜態(tài)庫。

由于 Glib 只依賴于一些最基本的系統(tǒng)庫,所以在執(zhí)行配置的過程中應該不會出現(xiàn)任何問題才是。然而,對于 GTK+和其它依賴庫,如果在配置過程中發(fā)現(xiàn)需要的程序或者庫不存在,或者版本不符合要求,都會顯示相應的錯誤提示后異常中止配置過程。如果配置不成功,則不能繼續(xù)進行下面的程序構(gòu)建過程。

對新手來說,他們通常不清楚什么樣的配置結(jié)果是成功的,什么是失敗的。下面提供兩種簡單的檢查配置是否成功的方法:
  • 配置過程中輸出的信息,除了顯示在屏幕上之外,還記錄在一個名為 config.log 的文件中。檢查這個文件中是否有 configure: exit 0 這樣的一句話(一般位于文件的后面部分或者最后一行)。如果是,說明配置成功;如果不是(比如 configure: exit 1)說明配置過程中出現(xiàn)了錯誤,配置失敗。
  • 在 ./configure 命令執(zhí)行完畢后立即執(zhí)行 echo $? 命令,檢查它的輸出結(jié)果。如果輸出是 0,說明配置成功;0 之外的數(shù)字說明配置失敗。在 Linux 系統(tǒng)上,可以用這個方法檢查一個命令或程序在其結(jié)束后返回給系統(tǒng)的值是多少。一般 0 代表成功,非 0 表示程序異常退出。

6.2.3 構(gòu)建

從源代碼生成程序的過程稱為構(gòu)建(Build)。這里所說的“程序”是一個廣義的概念:既可以是其一般意義上的二進制可執(zhí)行程序(Program),也可以是一個文本形式的可執(zhí)行腳本(Script),還可以是庫(Library)、頭文件(Header)、數(shù)據(jù)(Data)等等。一個軟件包中往往包含以上一種或者多種形式的程序構(gòu)建,其中以二進制可執(zhí)行程序和庫最為常見。

對于用編譯型語言(如 C 或者 C++)寫的程序來說(GTK+ 和它的一些依賴庫就是用 C 語言寫成的),軟件的構(gòu)建過程主要是編譯和連接的過程。在 Linux 系統(tǒng)上,構(gòu)建是通過執(zhí)行 make 命令實現(xiàn)的:

$ make

make 是根據(jù) Makefile 的內(nèi)容來決定如何構(gòu)建程序的,而這個 Makefile 就是上面配置的產(chǎn)物。執(zhí)行 make 命令之后,程序的編譯過程就開始了。這是一個比較耗時的過程,特別是對于一些大型的軟件包(如 GTK+ 及其依賴庫)來說更是這樣。

make 結(jié)束后,也可以執(zhí)行 echo $? 命令檢查 make 是否執(zhí)行成功。一般只要配置通過了,make 應該不會出現(xiàn)什么問題才是。

make 的結(jié)果,對于程序來說,主要生成的是可執(zhí)行程序文件;對于庫來說,主要生成的是庫文件。下面的安裝過程將把需要的文件拷貝到在配置時指定的安裝目錄中去。

6.2.4 安裝

構(gòu)建成功的軟件包的安裝是通過帶 install 參數(shù)的 make 進行的:

$ make install

需要在此說明的是:在 Linux 系統(tǒng),除了 root 用戶和具有相應權限的用戶之外,一般用戶只有在自己的用戶目錄下才有寫權限;對于用戶目錄之外的其它目錄和文件,一般只能讀而不能寫。我們在配置的時候?qū)⒃O置的安裝目錄是 /opt/gtk,對于一般用戶來說是只讀的。如果是這樣的話,上面的 make install 雖然被執(zhí)行,但是由于沒有寫的權限,不能向這個目錄中拷貝文件,所以安裝是不成功的。

一般需要如下面這樣先切換到 root 用戶,然后再進行安裝:

$ su
# make install

上面的“#”符號表示處于 root 狀態(tài)下的命令行提示符。

在執(zhí)行完 make install 之后,也可以用 echo $? 檢查是否執(zhí)行安裝成功。

如果此時查看 /opt/gtk 目錄,你會發(fā)現(xiàn)這個目錄下又有幾個子目錄,如 bin、include、lib、share。這是因為每個庫(如 Glib)又根據(jù)使用目的不同將安裝文件進行了劃分:bin 是執(zhí)行文件目錄,include 是頭文件目錄,lib 是庫文件目錄,share 是庫的公用目錄,包括本地翻譯文件、各種格式的說明文檔和例子程序等。

安裝完成后,應該立即退出 root 用戶,返回到原來的用戶狀態(tài):

# exit

root 用戶權限應該僅在切實需要的時候才使用。很多初學者無論做什么都是以 root 進行,以為這樣方便。其實對于新手而言這最是要不得,很容易由于誤操作而損壞系統(tǒng)。即使只有你一個人使用一個 Linux 系統(tǒng),也應該注冊一個普通用戶、平時以一個普通用戶的身份使用系統(tǒng)。

6.2.5 設置

新手往往不清楚為什么要對庫進行設置,要進行什么樣的設置。為此,在下面介紹了一些有關庫的設置的背景知識。如果已經(jīng)了解了這部分內(nèi)容,或者急于進行實際的設置操作,可直接轉(zhuǎn)到最后一小節(jié)“GTK+ 及其依賴庫的設置”。

6.2.5.1 搜索路徑

上面的安裝已經(jīng)把庫的各類文件拷貝到指定的安裝目錄中了,這個庫也就可以被其它程序或者庫來使用了。庫的使用主要包括兩方面的內(nèi)容:對庫的頭文件的使用以及對庫文件(靜態(tài)庫或共享庫)的使用。相應地,庫的設置也就是如何對這兩類文件進行定位的問題。對文件進行定位通常是用設置文件的搜索路徑的方法來解決的。在使用的過程中按照搜索路徑的先后順序查找,第一個找到文件將被使用。

庫的頭文件在程序中被包含使用,而且僅僅用在程序編譯階段,所以頭文件的默認搜索路徑是由編譯器提供的。處于默認搜索路徑內(nèi)的頭文件不需要進行搜索路徑的設置即可直接使用。雖然每個編譯器提供的頭文件的默認搜索路徑不盡相同,但是都把 /usr/include 作為默認的搜索路徑之一。使用處于默認搜索路徑之外的頭文件需要在編譯的時候通過編譯命令的 -I 參數(shù)指定其路徑。這是對頭文件進行定位的方式。

庫文件在連接(靜態(tài)庫和共享庫)和運行(僅限于使用共享庫的程序)時被使用,其搜索路徑是在系統(tǒng)中進行設置的。一般 Linux 系統(tǒng)把 /lib 和 /usr/lib 兩個目錄作為默認的庫搜索路徑,所以使用這兩個目錄中的庫時不需要進行設置搜索路徑即可直接使用。對于處于默認庫搜索路徑之外的庫,需要將庫的位置添加到庫的搜索路徑之中。設置庫文件的搜索路徑有下列兩種方式,可任選其一使用:
  • 在環(huán)境變量 LD_LIBRARY_PATH 中指明庫的搜索路徑。
  • 在 /etc/ld.so.conf 文件中添加庫的搜索路徑。

需要注意的是:第二種搜索路徑的設置方式對于程序連接時的庫(包括共享庫和靜態(tài)庫)的定位已經(jīng)足夠了,但是對于使用了共享庫的程序的執(zhí)行還是不夠的。這是因為為了加快程序執(zhí)行時對共享庫的定位速度,避免使用搜索路徑查找共享庫的低效率,所以是直接讀取庫列表文件 /etc/ld.so.cache 從中進行搜索的。/etc/ld.so.cache 是一個非文本的數(shù)據(jù)文件,不能直接編輯,它是根據(jù) /etc/ld.so.conf 中設置的搜索路徑由 /sbin/ldconfig 命令將這些搜索路徑下的共享庫文件集中在一起而生成的(ldconfig 命令要以 root 權限執(zhí)行)。因此,為了保證程序執(zhí)行時對庫的定位,在 /etc/ld.so.conf 中進行了庫搜索路徑的設置之后,還必須要運行 /sbin/ldconfig 命令更新 /etc/ld.so.cache 文件之后才可以。

在程序連接時,對于庫文件(靜態(tài)庫和共享庫)的搜索路徑,除了上面的設置方式之外,還可以通過 -L 參數(shù)顯式指定。因為用 -L 設置的路徑將被優(yōu)先搜索,所以在連接的時候通常都會以這種方式直接指定要連接的庫的路徑。

有的使用了共享庫的程序,在編譯和連接時都很順利,但是在運行時卻發(fā)生了找不到共享庫的問題,其原因就是庫的搜索路徑?jīng)]有設置,或者設置不正確。

6.2.5.2 編譯和連接界面

一般來說,如果庫的頭文件不在 /usr/include 目錄中,那么在編譯的時候需要用 -I 參數(shù)指定其路徑。由于同一個庫在不同系統(tǒng)上可能位于不同的目錄下,用戶安裝庫的時候也可以將庫安裝在不同的目錄下,所以即使使用同一個庫,由于庫的路徑的不同,造成了用 -I 參數(shù)指定的頭文件的路徑也可能不同,其結(jié)果就是造成了編譯命令界面的不統(tǒng)一。如果使用 -L 參數(shù),也會造成連接界面的不統(tǒng)一。編譯和連接界面不統(tǒng)一會為庫的使用帶來麻煩。

為了解決編譯和連接界面不統(tǒng)一的問題,人們找到了一些解決辦法。其基本思想就是:事先把庫的位置信息等保存起來,需要的時候再通過特定的工具將其中有用的信息提取出來供編譯和連接使用。這樣,就可以做到編譯和連接界面的一致性。其中,目前最為常用的庫信息提取工具就是下面介紹的 pkg-config。

6.2.5.3 pkg-config

pkg-config 是通過庫提供的一個 .pc 文件獲得庫的各種必要信息的,包括版本信息、編譯和連接需要的參數(shù)等。這些信息可以通過 pkg-config 提供的參數(shù)單獨提取出來直接供編譯器和連接器使用。

在默認情況下,每個支持 pkg-config 的庫對應的 .pc 文件在安裝后都位于安裝目錄中的 lib/pkgconfig 目錄下。例如,我們在上面已經(jīng)將 Glib 安裝在 /opt/gtk 目錄下了,那么這個 Glib 庫對應的 .pc 文件是 /opt/gtk/lib/pkgconfig 目錄下一個叫 glib-2.0.pc 的文件(不妨看看這個文件的內(nèi)容來獲得對 .pc 文件的一些感性認識。)

使用 pkg-config 的 --cflags 參數(shù)可以給出在編譯時所需要的選項,而 --libs 參數(shù)可以給出連接時的選項。例如,假設一個 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 工具來獲得庫的選項,所以不論庫安裝在什么目錄下,都可以使用相同的編譯和連接命令,帶來了編譯和連接界面的統(tǒng)一。

使用 pkg-config 工具提取庫的編譯和連接參數(shù)有兩個基本的前提:
  • 庫本身在安裝的時候必須提供一個相應的 .pc 文件。不這樣做的庫說明不支持 pkg-config 工具的使用。
  • pkg-config 必須知道要到哪里去尋找此 .pc 文件。

GTK+ 及其依賴庫支持使用 pkg-config 工具,所以剩下的問題就是如何告訴 pkg-config 到哪里去尋找?guī)鞂?.pc 文件,這也是通過設置搜索路徑來解決的。

6.2.5.4 GTK+ 及其依賴庫的設置

6.2.5.4.1 以編譯和連接為目的的設置

對于支持 pkg-config 工具的 GTK+ 及其依賴庫來說,庫的頭文件的搜索路徑的設置變成了對 .pc 文件搜索路徑的設置。.pc 文件的搜索路徑是通過環(huán)境變量 PKG_CONFIG_PATH 來設置的,pkg-config 將按照設置路徑的先后順序進行搜索,直到找到指定的 .pc 文件為止。

Linux 中環(huán)境變量的設置方式和使用的 shell 有關。在這里是以 bash 為例進行說明的。如果你發(fā)現(xiàn)這里的環(huán)境變量的設置方法不能成功的話,應該檢查你在當前的終端中使用的是什么 shell:

$ ps --no-headers --format comm $$

注:如果 ps 被定義為別名,可能需要執(zhí)行 \ps --no-headers --format comm $$ 才行。

然后根據(jù)這種 shell 的環(huán)境變量的設置方法進行設置。如果系統(tǒng)中存在有 bash 的話,也可以將 shell 切換為 bash:

$ bash

這樣就可以按照下面介紹的方法設置環(huán)境變量了。

安裝完 Glib 后,在 bash 中應該進行如下設置:

$ export PKG_CONFIG_PATH=/opt/gtk/lib/pkgconfig:$PKG_CONFIG_PATH

可以執(zhí)行下面的命令檢查是否 /opt/gtk/lib/pkgconfig 路徑已經(jīng)設置在 PKG_CONFIG_PATH 環(huán)境變量中:

$ echo $PKG_CONFIG_PATH

這樣設置之后,使用 Glib 庫的其它程序或庫在編譯的時候 pkg-config 就知道首先要到 /opt/gtk/lib/pkgconfig 這個目錄中去尋找 glib-2.0.pc 了(GTK+ 和其它的依賴庫的 .pc 文件也將拷貝到這里,也會首先到這里搜索它們對應的 .pc 文件)。之后,通過 pkg-config 就可以把其中庫的編譯和連接參數(shù)提取出來供程序在編譯和連接時使用。

另外還需要注意的是:環(huán)境變量的設置只對當前的終端窗口有效。如果到了沒有進行上述設置的終端窗口中,pkg-config 將找不到新安裝的 glib-2.0.pc 文件、從而可能使后面進行的安裝(如 Glib 之后的 Atk 的安裝)無法進行。

6.2.5.4.2 以連接和執(zhí)行為目的的設置

前面已經(jīng)說明過了,庫搜索路徑的設置有兩種方式:在環(huán)境變量 LD_LIBRARY_PATH 中設置以及在 /etc/ld.so.conf 文件中設置。

其中,第二種設置方式需要 root 權限,以改變 /etc/ld.so.conf 文件并執(zhí)行 /sbin/ldconfig 命令。而且,當系統(tǒng)重新啟動后,所有的基于 GTK2 的程序在運行時都將使用新安裝的 GTK+ 庫。不幸的是,由于 GTK+ 版本的改變,這有時會給應用程序帶來兼容性的問題,造成某些程序運行不正常。

為了避免出現(xiàn)上面的這些情況,在 GTK+ 及其依賴庫的安裝過程中對于庫的搜索路徑的設置將采用第一種方式進行。這種設置方式不需要 root 權限,設置也簡單:

$ export LD_LIBRARY_PATH=/opt/gtk/lib:$LD_LIBRARY_PATH

可以用下面的命令查看 LD_LIBRAY_PATH 的設置內(nèi)容:

$ echo $LD_LIBRARY_PATH

至此,庫的兩種設置就完成了。

由于我們將 GTK+ 及其依賴庫設置安裝在同一目錄中,所以上面的對環(huán)境變量 PKG_CONFIG_PATH 和 LD_LIBRAY_PATH 的設置在一個終端窗口中只要進行一次就可以了,以后安裝其它庫的時候不需要再行設置。

經(jīng)過以上設置之后,使用了 Glib 的程序(如下面要安裝的 Atk)就能夠根據(jù)在 PKG_CONFIG_PATH 和 LD_LIBRAY_PATH 中設置的搜索路徑找到新安裝的 Glib 庫了。如果不進行上面的設置,或者設置有誤,可能找到的是舊版的 Glib,也可能出現(xiàn)找不到 Glib 的錯誤。

現(xiàn)在,可以執(zhí)行下面的命令檢查 Glib 的版本號:

$ pkg-config --modversion glib-2.0

如果顯示的版本號和你進行安裝的軟件包中的版本號一致,那么恭喜你! 你已經(jīng)成功地完成了 Glib 庫的安裝和設置,可以繼續(xù)進行其它庫的安裝了。

注意:Atk 等庫的編譯會用到 /opt/gtk/bin 中的命令,所以還應該對 PATH 環(huán)境變量進行如下設置:

$ export PATH=/opt/gtk/bin:$PATH

6.3 其它庫的安裝

在確認已經(jīng)成功安裝了 Glib 之后,可以順次安裝其它的庫。

6.3.1 安裝 Atk

參考“安裝 Glib”一節(jié)中的操作進行。如果始終在同一個終端窗口中操作的話,最后的設置過程可不執(zhí)行。檢查 Atk 的版本號:

$ pkg-config --modversion atk

6.3.2 安裝 Cairo

參考“安裝 Glib”一節(jié)中的操作進行。如果始終在同一個終端窗口中操作的話,最后的設置過程可不執(zhí)行。檢查 Cairo 的版本號:

$ pkg-config --modversion cairo

6.3.3 安裝 Pango

參考“安裝 Glib”一節(jié)中的操作進行。如果始終在同一個終端窗口中操作的話,最后的設置過程可不執(zhí)行。檢查 Pango 的版本號:

$ pkg-config --modversion pango

注意:配置 Pango 成功的另外一個標志是:在 ./configure 最后顯示出來的一行信息 backends: FreeType X Xft Cairo 中應該有 Cairo 字樣的出現(xiàn)。如果沒有,比如象 backends: FreeType X Xft 這樣,說明 Pango 的配置不成功;Pango 配置不成功,說明其依賴庫 Cairo 沒有安裝或者 Cairo 庫的設置不正確。

6.3.4 安裝 Gtk+

參考“安裝 Glib”一節(jié)中的操作進行。如果始終在同一個終端窗口中操作的話,最后的設置過程可不執(zhí)行。檢查 GTK+ 的版本號:

$ pkg-config --modversion gtk+-2.0

[ 本帖最后由 whyglinux 于 2007-5-8 09:30 編輯 ]

論壇徽章:
0
9 [報告]
發(fā)表于 2007-01-07 23:59 |只看該作者
7. 庫的使用

7.1 庫使用之前的設置

在我們采用的安裝方案中,由于是使用環(huán)境變量對 GTK+ 及其依賴庫進行的設置,所以當系統(tǒng)重新啟動、或者新開一個終端窗口之后,如果想使用新安裝的 GTK+ 庫,需要如上面那樣重新設置 PKG_CONFIG_PATH 和 LD_LIBRARY_PATH 環(huán)境變量。

這種使用 GTK+ 的方法,在使用之前多了一個對庫進行設置的過程。雖然顯得稍微繁瑣了一些,但卻是一種最安全的使用 GTK+ 庫的方式,不會對系統(tǒng)上已經(jīng)存在的使用了 GTK+ 庫的程序(比如 GNOME 桌面)帶來任何沖擊。

為了使庫的設置變得簡單一些,可以把下面的這兩句設置保存到一個文件中(比如 set_gtk-2.10 文件):

export PKG_CONFIG_PATH=/opt/gtk/lib/pkgconfig:$PKG_CONFIG_PATH
export LD_LIBRARY_PATH=/opt/gtk/lib:$LD_LIBRARY_PATH

之后,就可以用下面的方法進行庫的設置了(其中的 source 命令也可以用 . 代替):

$ source set_gtk-2.10

只有在用新版的 GTK+ 庫開發(fā)應用程序、或者運行使用了新版 GTK+ 庫的程序的時候,才有必要進行上述設置。

如果想避免使用 GTK+ 庫之前上述設置的麻煩,可以把上面兩個環(huán)境變量的設置在系統(tǒng)的配置文件中(如 /etc/profile)或者自己的用戶配置文件中(如 ~/.bash_profile) ;庫的搜索路徑也可以設置在 /etc/ld.so.conf 文件中,等等。這種設置在系統(tǒng)啟動時會生效,從而會導致使用 GTK+ 的程序使用新版的 GTK+ 運行庫,這有可能會帶來一些問題。當然,如果你發(fā)現(xiàn)用新版的 GTK+ 代替舊版沒有什么問題的話,使用這種設置方式是比較方便的。

7.2 庫文檔

使用一個庫免不了要參考庫的文檔。GTK+ 及其依賴庫的各個庫的參看文檔也被安裝,具體位置在安裝目錄的 share/gtk-doc/html 目錄下分別存放。可以用瀏覽器分別打開每個目錄中的 index.html,然后將其添加到網(wǎng)絡書簽中以便隨時參考。

(完)

論壇徽章:
0
10 [報告]
發(fā)表于 2007-03-05 23:46 |只看該作者
真是好東東,可惜看到有點晚,在弄audacious時吃過大虧。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP