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

Chinaunix

標(biāo)題: 在 Linux 系統(tǒng)上源碼安裝 GTK+ 2.0 [打印本頁(yè)]

作者: whyglinux    時(shí)間: 2007-01-07 23:45
標(biāo)題: 在 Linux 系統(tǒng)上源碼安裝 GTK+ 2.0
==================================================
Keywords: GTK+, Install, Linux, Source
Author:       whyglinux (whyglinux AT hotmail DOT com)
Date:          2007-01-07
==================================================

目錄

0. 前言
1. 二進(jìn)制安裝和源碼安裝
2. GTK+ 依賴軟件包
3. 查看軟件的版本號(hào)
4. 安裝規(guī)劃
  4.1 系統(tǒng)上未安裝 GTK+
  4.2 系統(tǒng)上已安裝 GTK+
5. 軟件下載
6. 庫(kù)的安裝
  6.1 安裝順序
  6.2 安裝過(guò)程
    6.2.1 解包
    6.2.2 配置
    6.2.3 構(gòu)建
    6.2.4 安裝
    6.2.5 設(shè)置
      6.2.5.1 搜索路徑
      6.2.5.2 編譯和連接界面
      6.2.5.3 pkg-config
      6.2.5.4 GTK+ 及其依賴庫(kù)的設(shè)置
        6.2.5.4.1 以編譯和連接為目的的設(shè)置
        6.2.5.4.2 以連接和執(zhí)行為目的的設(shè)置
  6.3 其它庫(kù)的安裝
    6.3.1 安裝 Atk
    6.3.2 安裝 Cairo
    6.3.3 安裝 Pango
    6.3.4 安裝 Gtk+
7. 庫(kù)的使用
  7.1 庫(kù)使用之前的設(shè)置
  7.2 庫(kù)文檔

[ 本帖最后由 whyglinux 于 2007-1-8 00:10 編輯 ]
作者: whyglinux    時(shí)間: 2007-01-07 23:47
0. 前言

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

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

如果你發(fā)現(xiàn)了本篇中的錯(cuò)誤,或者對(duì)本文有什么感想或者建議,可通過(guò) whyglinux AT hotmail DOT com 郵箱和作者聯(lián)系。
作者: whyglinux    時(shí)間: 2007-01-07 23:49
1. 二進(jìn)制安裝和源碼安裝

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

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

二進(jìn)制安裝方式簡(jiǎn)單快捷,但也有其力所不及的地方:通常一個(gè)軟件的二進(jìn)制包的版本更新要落后于其最新版本,有些軟件也可能沒(méi)有二進(jìn)制包提供。這樣,要使用最新的版本很可能源碼安裝就是唯一可以選擇的方式了。有時(shí)人們也想體驗(yàn)或?qū)W習(xí) GTK+ 的源碼安裝方式,畢竟在開(kāi)源盛世的今天,對(duì)于程序員來(lái)說(shuō)源碼安裝也是必須要過(guò)的一關(guān)。
作者: whyglinux    時(shí)間: 2007-01-07 23:50
2. GTK+ 依賴軟件包

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

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

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

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

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

根據(jù)經(jīng)驗(yàn),只要系統(tǒng)中已經(jīng)有了 1~9 各項(xiàng),而且系統(tǒng)也較新的話,為了安裝 GTK+ 一般沒(méi)有必要把它們都升級(jí)到最新版本,除了其中的 pkg-config 工具。pkg-config 的變動(dòng)較大,新版本的 GTK+ 的安裝需要新版 pkg-config 的支持,否則可能會(huì)使安裝過(guò)程失敗。因此,要在安裝 GTK+ 之前檢查 pkg-config 的版本號(hào)。如果版本過(guò)低,一定要對(duì)它進(jìn)行版本更新。至于 GTK+ 安裝時(shí)對(duì) pkg-config 的最低版本要求,可以在 GTK+ 下載目錄的 dependencies 目錄中找到對(duì)應(yīng)的 pkg-config 軟件包,從軟件包上提供的版本信息中獲得確認(rèn)。
作者: whyglinux    時(shí)間: 2007-01-07 23:52
3. 查看軟件的版本號(hào)

查看已經(jīng)安裝的軟件的版本號(hào)的目的有二:

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

對(duì)于可運(yùn)行的程序命令來(lái)說(shuō),查看版本號(hào)的方式是在執(zhí)行命令后加上 --version 參數(shù)。例如,對(duì)于 pkg-config 來(lái)說(shuō),其過(guò)程是這樣的:

$ pkg-config --version

上面的“$”符號(hào)表示命令行提示符。

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

對(duì)于庫(kù)來(lái)說(shuō),如果它支持使用 pkg-config,則可以使用 pkg-config 來(lái)查看其版本號(hào)。例如,對(duì)于 GTK+ 2.0 庫(kù)來(lái)說(shuō),可以這樣:

$ pkg-config --modversion gtk+-2.0

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

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

通過(guò)顯示出來(lái)的信息中的 -I 后面的路徑可以大體知道 GTK+ 及其依賴庫(kù)的安裝位置。看看它們是不是都位于 /usr 目錄下。
作者: whyglinux    時(shí)間: 2007-01-07 23:53
4. 安裝規(guī)劃

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

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

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

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

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

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

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

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

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

和安裝到 /usr 目錄中不同,如果將庫(kù)安裝到一個(gè)非系統(tǒng)目錄中(比如我們將要使用的 /opt/gtk 目錄),只將庫(kù)安裝完成還是不夠的,還必須要進(jìn)行一些必要的設(shè)置才能使用這個(gè)新安裝好的庫(kù)。在下面的相關(guān)章節(jié)中講對(duì)庫(kù)的設(shè)置作具體說(shuō)明。
作者: whyglinux    時(shí)間: 2007-01-07 23:56
5. 軟件下載

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

在各自的下載目錄中,通常列出了各種版本的軟件包,而且一般每個(gè)版本都有 .tar.gz 和 .tar.bz2 兩種不同壓縮格式。要注意根據(jù)各個(gè)軟件包的版本號(hào)或者日期選擇一個(gè)最新的版本下載,有的庫(kù)的下載目錄下面也用一個(gè) LATEST-xxx 的文件名告訴目前的最新版本是多少。由于 .tar.bz2 壓縮格式的文件較小,推薦下載這種軟件包;如果沒(méi)有,再下載 .tar.gz 格式的包。

下面是目前各個(gè)庫(kù)的最新版本的軟件包:

可以新建一個(gè)目錄,用于存放以上這些下載的軟件包。

由于這些軟件包都是使用 GNU Autotools 工具創(chuàng)建的,所以各個(gè)軟件包的構(gòu)建和安裝界面是相同的,都是 ./configure && make && make install。因此,我們重點(diǎn)介紹 Glib 庫(kù)的安裝,對(duì)包括 GTK+ 在內(nèi)的其它庫(kù)只作簡(jiǎn)單說(shuō)明;在安裝其它庫(kù)的時(shí)候,可比照 Glib 庫(kù)的安裝過(guò)程進(jìn)行。
作者: whyglinux    時(shí)間: 2007-01-07 23:57
6. 庫(kù)的安裝

6.1 安裝順序

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

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

6.2 安裝過(guò)程

源碼安裝軟件包的過(guò)程可劃分為以下幾個(gè)步驟:

下面以 Glib 的安裝為例分別具體介紹庫(kù)安裝的各個(gè)過(guò)程。

6.2.1 解包

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

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

$ tar xjvf glib-2.12.5.tar.bz2

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

$ tar xzvf glib-2.12.5.tar.gz

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

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

6.2.2 配置

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

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

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

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

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

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

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

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

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

對(duì)新手來(lái)說(shuō),他們通常不清楚什么樣的配置結(jié)果是成功的,什么是失敗的。下面提供兩種簡(jiǎn)單的檢查配置是否成功的方法:

6.2.3 構(gòu)建

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

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

$ make

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

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

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

6.2.4 安裝

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

$ make install

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

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

$ su
# make install

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

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

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

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

# exit

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

6.2.5 設(shè)置

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

6.2.5.1 搜索路徑

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

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

庫(kù)文件在連接(靜態(tài)庫(kù)和共享庫(kù))和運(yùn)行(僅限于使用共享庫(kù)的程序)時(shí)被使用,其搜索路徑是在系統(tǒng)中進(jìn)行設(shè)置的。一般 Linux 系統(tǒng)把 /lib 和 /usr/lib 兩個(gè)目錄作為默認(rèn)的庫(kù)搜索路徑,所以使用這兩個(gè)目錄中的庫(kù)時(shí)不需要進(jìn)行設(shè)置搜索路徑即可直接使用。對(duì)于處于默認(rèn)庫(kù)搜索路徑之外的庫(kù),需要將庫(kù)的位置添加到庫(kù)的搜索路徑之中。設(shè)置庫(kù)文件的搜索路徑有下列兩種方式,可任選其一使用:

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

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

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

6.2.5.2 編譯和連接界面

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

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

6.2.5.3 pkg-config

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

在默認(rèn)情況下,每個(gè)支持 pkg-config 的庫(kù)對(duì)應(yīng)的 .pc 文件在安裝后都位于安裝目錄中的 lib/pkgconfig 目錄下。例如,我們?cè)谏厦嬉呀?jīng)將 Glib 安裝在 /opt/gtk 目錄下了,那么這個(gè) Glib 庫(kù)對(duì)應(yīng)的 .pc 文件是 /opt/gtk/lib/pkgconfig 目錄下一個(gè)叫 glib-2.0.pc 的文件(不妨看看這個(gè)文件的內(nèi)容來(lái)獲得對(duì) .pc 文件的一些感性認(rèn)識(shí)。)

使用 pkg-config 的 --cflags 參數(shù)可以給出在編譯時(shí)所需要的選項(xiàng),而 --libs 參數(shù)可以給出連接時(shí)的選項(xiàng)。例如,假設(shè)一個(gè) sample.c 的程序用到了 Glib 庫(kù),就可以這樣編譯:

$ 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 工具來(lái)獲得庫(kù)的選項(xiàng),所以不論庫(kù)安裝在什么目錄下,都可以使用相同的編譯和連接命令,帶來(lái)了編譯和連接界面的統(tǒng)一。

使用 pkg-config 工具提取庫(kù)的編譯和連接參數(shù)有兩個(gè)基本的前提:

GTK+ 及其依賴庫(kù)支持使用 pkg-config 工具,所以剩下的問(wèn)題就是如何告訴 pkg-config 到哪里去尋找?guī)鞂?duì)應(yīng)的 .pc 文件,這也是通過(guò)設(shè)置搜索路徑來(lái)解決的。

6.2.5.4 GTK+ 及其依賴庫(kù)的設(shè)置

6.2.5.4.1 以編譯和連接為目的的設(shè)置

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

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

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

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

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

$ bash

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

安裝完 Glib 后,在 bash 中應(yīng)該進(jìn)行如下設(shè)置:

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

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

$ echo $PKG_CONFIG_PATH

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

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

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

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

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

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

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

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

$ echo $LD_LIBRARY_PATH

至此,庫(kù)的兩種設(shè)置就完成了。

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

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

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

$ pkg-config --modversion glib-2.0

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

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

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

6.3 其它庫(kù)的安裝

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

6.3.1 安裝 Atk

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

$ pkg-config --modversion atk

6.3.2 安裝 Cairo

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

$ pkg-config --modversion cairo

6.3.3 安裝 Pango

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

$ pkg-config --modversion pango

注意:配置 Pango 成功的另外一個(gè)標(biāo)志是:在 ./configure 最后顯示出來(lái)的一行信息 backends: FreeType X Xft Cairo 中應(yīng)該有 Cairo 字樣的出現(xiàn)。如果沒(méi)有,比如象 backends: FreeType X Xft 這樣,說(shuō)明 Pango 的配置不成功;Pango 配置不成功,說(shuō)明其依賴庫(kù) Cairo 沒(méi)有安裝或者 Cairo 庫(kù)的設(shè)置不正確。

6.3.4 安裝 Gtk+

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

$ pkg-config --modversion gtk+-2.0

[ 本帖最后由 whyglinux 于 2007-5-8 09:30 編輯 ]
作者: whyglinux    時(shí)間: 2007-01-07 23:59
7. 庫(kù)的使用

7.1 庫(kù)使用之前的設(shè)置

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

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

為了使庫(kù)的設(shè)置變得簡(jiǎn)單一些,可以把下面的這兩句設(shè)置保存到一個(gè)文件中(比如 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

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

$ source set_gtk-2.10

只有在用新版的 GTK+ 庫(kù)開(kāi)發(fā)應(yīng)用程序、或者運(yùn)行使用了新版 GTK+ 庫(kù)的程序的時(shí)候,才有必要進(jìn)行上述設(shè)置。

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

7.2 庫(kù)文檔

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

(完)
作者: 權(quán)老實(shí)    時(shí)間: 2007-03-05 23:46
真是好東東,可惜看到有點(diǎn)晚,在弄audacious時(shí)吃過(guò)大虧!
作者: 湖光倒影    時(shí)間: 2007-05-01 17:10
我安裝GLib 成功但是安裝atk的時(shí)候出錯(cuò)了.make的時(shí)候有兩個(gè)錯(cuò)誤.
請(qǐng)問(wèn),安裝atk也是執(zhí)行$ ./configure --prefix=/opt/gtk 命令后make嗎?

錯(cuò)誤信息如下


[root@LINUX atk-1.9.1]# make
make  all-recursive
make[1]: Entering directory `/gtk/atk-1.9.1'
Making all in atk
make[2]: Entering directory `/gtk/atk-1.9.1/atk'
glib-genmarshal --prefix=atk_marshal ./atkmarshal.list --header >> xgen-gmh \
&& (cmp -s xgen-gmh atkmarshal.h || cp xgen-gmh atkmarshal.h) \
&& rm -f xgen-gmh xgen-gmh~                                     \
&& echo timestamp > stamp-atkmarshal.h
/bin/sh: line 1: glib-genmarshal: command not found
make[2]: *** [stamp-atkmarshal.h] Error 127
make[2]: Leaving directory `/gtk/atk-1.9.1/atk'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/gtk/atk-1.9.1'
make: *** [all] Error 2

[ 本帖最后由 湖光倒影 于 2007-5-1 17:20 編輯 ]
作者: 湖光倒影    時(shí)間: 2007-05-01 17:31
我覺(jué)得好像和glib有關(guān),下面是glib的信息  

[root@LINUX atk-1.9.1]# echo $PKG_CONFIG_PATH
/opt/gtk/lib/pkgconfig:
[root@LINUX atk-1.9.1]# echo $LD_LIBRARY_PATH
/opt/gtk/lib:
[root@LINUX atk-1.9.1]# pkg-config --modversion glib-2.0
2.12.5
作者: whyglinux    時(shí)間: 2007-05-08 09:34
To 湖光倒影

你提到的問(wèn)題在于沒(méi)有找到 glib-genmarshal 命令。已經(jīng)針對(duì)這個(gè)問(wèn)題進(jìn)行了修正。具體可參見(jiàn)“6.3 其它庫(kù)的安裝”一節(jié)前面的“注意”一段。

謝謝。
作者: 權(quán)老實(shí)    時(shí)間: 2007-05-19 22:22
真是好東東,更理解了pkg-config LD_LIBRARY_PATH
作者: marion    時(shí)間: 2007-09-17 12:26
卓然有大師風(fēng)范!學(xué)習(xí)了……
作者: breeze_lee    時(shí)間: 2007-10-07 22:28
非常感謝,收藏了,謝謝!
作者: ubuntu590    時(shí)間: 2007-10-26 11:58
有茅塞頓開(kāi)的感覺(jué),解決了長(zhǎng)久以來(lái)的疑惑
真的感覺(jué)感謝。。。:wink:
作者: dexinmeng    時(shí)間: 2007-11-24 10:37
真是好文章!我一直在愁怎樣從源碼安裝GTK+,依賴性實(shí)在太強(qiáng)了。今日搜索到這篇文章,能解決一直想解決但未能解決的難題。
作者: zhasm    時(shí)間: 2008-01-21 11:00
已經(jīng)收藏?梢宰鳛閷W(xué)習(xí)LFS的輔助資料。
作者: joeguan2    時(shí)間: 2008-06-12 04:52
是一篇好文章!多謝版主!
作者: liuhuizhangyi    時(shí)間: 2008-06-30 18:03
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: liuhuizhangyi    時(shí)間: 2008-07-03 16:46
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: ssafa    時(shí)間: 2008-07-17 18:28
gtk是免費(fèi)的不?
作者: 醉臥水云間    時(shí)間: 2008-07-17 22:05
學(xué)習(xí)
作者: 何強(qiáng)    時(shí)間: 2008-11-17 15:11
高手啊
作者: chinesedragon    時(shí)間: 2008-11-29 10:59
很詳細(xì)啊,很好
作者: lantian728    時(shí)間: 2010-12-31 16:38
真是好東東,好長(zhǎng)的東西
作者: yuweixian4230    時(shí)間: 2011-06-07 20:25





歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2