+ -
当前位置:首页 → 问答吧 → GTK+2.4.X编译方法(for MDK 9.1/10.0)

GTK+2.4.X编译方法(for MDK 9.1/10.0)

时间:2004-12-16

来源:互联网

一直以来,编译gtk+2.4.x都是一个令我头痛的问题,而且每装一次MDK 10.0,都需要编译一次gtk+2.4。总是“./configure ....”也不是办法。搜了网上许多帖子,参考了其中有关gtk+2.4相关的MDK源码包中的spec文件,写出了一个安装步骤笔记,其中可能有错误的地方和我尚不明白的地方,望大家见谅!

摘要 :介绍有关MDK 9.1/10.0 下编译GTK+2.4.x的方法,并参考了MDK相关源码包的依赖,自制了相关的RPM包和SRPM包。

注意 :本文禁止用于商业用途,并且完全“No warrant”!!!写本文纯属个人兴趣。如有不幸,实属无辜!请做好备份系统的安全措施!

关键词:gtk+2.4.x; 安装顺序; 简单美化

参考连接:
PHP 代码:
http://www.linuxsir.org/bbs/showthread.php?threadid=105467&highlight=openQ 

作者: csyfek   发布时间: 2004-12-16

前言:分两大部分,一为从 tar 源码包安装,另一为从 SRPM 包安装。无论是源码包安装还是 SRPM 包安装,务请注意安装的顺序!切记。切记。。。

释疑:本文的操作并不表明 Mandrake 9.2 不可以进行,只是我并无这个版本试验。见谅!

一、tar 源码包的安装方法
序:--工欲善其事,必先利其器。--

1、从网上得到以下必须组成的包: pkgconfig(0.15),glib(2.4.x),atk(1.6 or 1.7),freetype(2.1.4--2.1.9),fontconfig(2.2.1--2.2.3),xft(2.1.2--2.1.6),pango(1.4.1 or 1.6.0),libpng(1.2.5--1.2.7),tiff(3.6.1),jpegsrc.v6b,gtk+(2.4.x)

2、在你安装以前,温馨提示:请备份好你计算机原有的 /usr/lib/gtk-2.0/ 目录下的所有东西,还有 /etc/gtk-2.0 和 /etc/gtk 和 /etc/pango 和 /etc/fonts 目录下的全部配置文件!

3、请勿删除原有的gtk+版本的所有包!

第一回:--好的开始是成功的一半。--

***以下操作均为root用户进行,安装之前请把相应的包解压,最好先建立一目录,例如:gtk2.4,把所有的包都放到该目录下,方便以后翻查***

1、安装pkgconfig
./configure --prefix=/usr
make
make install
(下面一步向系统表明PKG_CONFIG_PATH变量)
export PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/X11R6/lib/pkgconfig
(完成上一步,或许你不想一次就把下面的所有东西都编译完,那么你可以在你的root目录下的.bashrc文件中加入上面命令,那么下一次只要以root登陆,就可以自动读取上面设好的变量了!)
(转到/usr/X11R6/lib下看看有无pkgconfig目录,没有?建一个呗!)
/sbin/ldconfig

2、安装glib
./configure --prefix=/usr
make
make install
/sbin/ldconfig

3、安装atk
./configure --prefix=/usr
make
make install
/sbin/ldconfig

***至此,初步准备工作完成。***

作者: csyfek   发布时间: 2004-12-16

第二回:--革命尚未成功,同志仍需努力!--
***下面将安装和字体有密切相关的包***

1、安装freetype
./configure --prefix=/usr
make
make install
/sbin/ldconfig

2、安装fontconfig
./configure --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man
make
(编译时如果在编译docs的部分时候出错的话,请在 ./configure 一步中加入“--disable-docs”参数。)
make install
/sbin/ldconfig

3、安装xft
插语:在
PHP 代码:
http://www.linuxsir.org/bbs/showthread.php?threadid=105467&highlight=openQ 
帖子中,作者曾提到只能够使用 freetype 2.1.4 这个版本,其实不然。这是由于自2.1.4版本之后,在你freetype的解出目录中的inlcude/freetype目录里 freetype.h 文件发生了一个微妙的变化。经过比较,使用2.1.4版本以上的freetype在进行 libxft-1.32版本 编译时会出现 http://dot.kde.org/1078855423/1078942212/ 所提及的错误。这是为什么呢?原因如下:
在 2.1.4 版本中的 freetype.h ,文件开始的部分如下:
PHP 代码:
#ifndef __FREETYPE_H__
#define __FREETYPE_H__ 
而在2.1.7版本中(其他大于2.1.4的版本与此类似),文件开始的部分如下:
PHP 代码:
#ifdef FT_FREETYPE_H
#error "`ft2build' hasn't been include yet!"
.........
#endif 
这一段之后接着的才是2.1.4版本的原来一段。
为此,在 1.33 版的 xft 已经把这个问题修正了,详情请看:http://cvsweb.xfree86.org/cvsweb/xc/...1=1.32&r2=1.33。
所以,倘若你使用的 libXft 是1.32版本的话,建议你使用新版本或者按上面的帖子修改相应部分。
***切记,下载1.33版的libXft之后,我们来继续编译***
./configure --prefix=/usr/X11R6
(注意上面的prefix不要打错了。)
make
make install
/sbin/ldconfig

4、安装pango

插语:无论pango的版本是 1.4.1 or 1.6.0 它们的模块标识都是 1.4.0 ,这一点你可以自己试验一下。
***安装***
./configure --prefix=/usr --sysconfdir=/etc
make
make install
/sbin/ldconfig

***至此,容易出现问题的几步都告一段落了。。。先泡一杯茶吧。 ***

作者: csyfek   发布时间: 2004-12-16

第三回:--暴风雨前的平静。--

1、安装libpng

插语:编译libpng时应选择适合你的操作平台的makefile文件,并且表明你的zlib的库和头文件的位置。这个操作可以通过修改makefile文件中变量值来实现。
***安装步骤如下***
(假设你已经进入了你的libpng解压目录,要做的是把scripts目录下的为linux平台所写的makefile文件makefile.linux拷贝到它的上层目录中,并重命名为makefile,为编译做准备。即如下(1)中的步骤。)
(1) cp scripts/makefile.linux ../makefile
(2) 现在你可以在你的解压目录中打开你刚刚得到的makefile文件,并找到如下的几行分别修改:
PHP 代码:
#Prefix must be a full path name
prefix=/usr/local  --->  prefix=/usr (把安装路径从/usr/local改为/usr)

#Where the zlib library and include files are located.
#.....
#.....
(看到没有“#”号打头的ZLIBLIB和ZLIBINC两行吗?)
ZLIBLIB=../zlib  --->  ZLIBLIB=/usr/lib
ZLIBINC=../zlib  --->  ZLIBINC=/usr/include
(分别把zlib的库文件和头文件指到你系统相应的库文件和头文件路径,因为你的zlib的文件就在那里。) 
(3) make
(4) make install
(5) /sbin/ldconfig

2、安装jpeg.v6b
插语:与上面的参考链接的帖子相反,应该先安装jpeg.v6b。这是因为tiff的编译需要使用jpeg.v6b的库。
***安装步骤如下***
./configure --enable-static --enable-shared --prefix=/usr
make
make install
/sbin/ldconfig

3、安装tiff
./configure --prefix=/usr --noninteractive --mandir=/usr/share/man
make
make install
/sbin/ldconfig

***至此,只剩下最后一个gtk+2.4.x了。***

作者: csyfek   发布时间: 2004-12-18

第四回:--俱往矣,数风流人物还看今朝!--

1、安装gtk+2.4.x
./configure --prefix=/usr --sysconfdir=/etc
make
make install
/sbin/ldconfig

2、在 X 中试一下运行需要使用gtk+2.4.x的程序,最好是在 X 的终端下运行(例如在konsole下敲入stardict并运行)。你将会看到该程序运行的相关信息。实验表明,程序运行中无甚异常,但会有一些运行中出现错误的提示。其中你很可能会遇到error:GTK engines....。这个“gtk engines”就是提示你的gtk+2.4.x还没有安装“gtk engines”库。那它究竟在哪里呢?

3、查看你的“/usr/lib/gtk-2.0/”目录,看到你原来的2.2版本的gtk+文件夹和新装上的2.4版本的文件夹吗?进入2.2版本的目录,看到有一个名为engines 的文件夹吗?呵呵~~你再看一下2.4版本的目录下面,它有么??? 那你应该明白怎样做吧。。。复制一个不就完了?!

***这个方法虽然我屡试不爽,不过毕竟是不同版本的gtk+的。所以这也是我后面接着要写的“从SRPM包安装gtk+2.4.x的原因之一。***

作者: csyfek   发布时间: 2004-12-18

二、SRPM 包的安装方法
第五回:--有那么一点用处,就有那么一点意义。--

插语:前面已经介绍了使用源代码包编译的过程,但若每一次都如此重复,未免太麻烦了。能不能把它们做成属于适合自己机子的包,以后需要时就可以使用呢?当然能了! 请接着往下看。

1、准备知识
(1) RPM 包的依赖性是一个非常棘手的问题,我们要做适合自己使用的包,那就要知道一点 RPM 包安装的顺序,否则将会出现一些意想不到的事情! 那么如何知道我们打好的包安装的先后呢?有一个非常便利的方法!就是使用 urpmi 工具。(还不知道urpmi命令的使用方法?快看看fundawang老大写的“打破Debian神话之一:urpmi系列工具”吧!)一般说来,urpmi可以知道各个包之间的安装的先后关系。而我们还可以巧妙地利用 rpm -qR 命令来知道卸载的先后关系,然后,把它逆转过来,同样可以了解安装的先后。不过 rpm -qR 只提供一个大概的信息,具体安装应以 urpmi 为准。

(2) 编写 spec 文件。由于 Mandrake 提供很多源代码RPM包(*.src.rpm),里面就包含必需的spec文件,所以这一步我们可以省很多功夫,只需要我们按照自己的要求改变其中的内容。如何获得其中的spec文件呢?可使用下面的命令:
#rpm --rebuild *.src.rpm
(上面一步不是熟悉的编译RPM包的命令吗?!)
#当看到开始解开压缩包(屏幕上显示:tar -xv- )的动作时,请停止编译过程。(可使用同时按ctrl和c键。)
#cd /usr/src/RPM/SPECS/
#ls
***此时,你也许会看到那些spec文件。对,我们就是要对他们做些修改。(具体的修改内容涉及spec文件的编写,有兴趣的兄弟请参考哈密瓜老大的“RPM SPEC文件编写通用规范”和probing老大的“精通RPM之--制作篇”二贴。先在此对哈兄和probing兄表示感谢! )

2、编译*.src.rpm
#rpm --rebuild name.src.rpm (name 是你要编译的SRPM包的名字)
(如上面的编译过程没有出现错误的话,继续下一步。)
#cd /usr/src/RPM/RPMS/i586/
(上面的路径是针对 Mandrake 默认设置来说的,由于 Mandrake 使用i586优化,所以要转到i586目录。此时,你应该看到你自己编译成功的 name.i586.rpm 包。)
#rpm -ivh --force name.i586.rpm
(之所以使用 -i 参数,是因为避免安装 gtk+2.4.x 而删除原来的 gtk+2.2 版本的某些库文件和头文件。)

***至此,我们大略知道了安装自己制作的RPM包而需要做的操作。下面我们将看看应该依什么顺序来编译和制作这些必需的包。***

作者: csyfek   发布时间: 2004-12-21

第六回:--大家好才是真的好!--
***由于网络问题,耽误了一天的时间,请大家包涵!最后一个部分来到了自己动手编译RPM包的时候了。编译的操作方法,上一回已经讲及。这里主要是安排安装的顺序。***

插语:在安装以下所有包之前,请确认你已经安装了gtk-doc这个包,因为下面的若干包在编译时候,都需要此包。若无此包的话,请务必从网络上下载,并安装之。请预先在你的机子环境变量中设置好PKG_CONFIG_PATH变量的值,设置方法和使用tar包安装的开始设置一样。在你安装好每一个编译好的RPM包之后,请执行/sbin/ldconfig命令。安装的顺序,下面已经详细写明,其中有的包可能出现冲突情况,请使用rpm -ivh --force --nodeps name.i586.rpm命令来安装。只要按照下面的顺序,操作应是无任何问题的。

***下面开始了喔!***
1、重建并安装pkgconfig包
***将得到的RPM包按以下顺序安装***
pkgconfig

2、重建并安装glib2.0包
***将得到的RPM包按以下顺序安装***
libglib2.0_0,glib-gettextize,libglib2.0_0-devel

3、重建并安装atk1.0包
***将得到的RPM包按以下顺序安装***
libatk1.0_0,libatk1.0_0-devel

4、重建并安装freetype包
***将得到的RPM包按以下顺序安装***
freetype,freetype-devel,freetype-tools

5、重建并安装freetype2包
***将得到的RPM包按以下顺序安装***
libfreetype6,libfreetype6-devel,libfreetype6-static-devel

######################################################################################
6、重建并安装fontconfig包
***将得到的RPM包按以下顺序安装***
libfontconfig1,fontconfig,libfontconfig1-devel
***这里我提供了两个SRPM包,一个是原来Mandrake的SRPM包,另一个包包含wood兄提供的fonts.conf文件。若你想只使用这个fonts.conf文件,可以到网站单独下载。(详见帖子“只要几秒钟,让你的是文字体不再发虚”,感谢wood兄!),我修改了原来的spec文件而打成的SRPM包(fontconfig-2.2.1-7.sc.mdk10.src.rpm)。使用该fonts.conf文件是一个又简单又容易显效的美化方法。而且安装此包只替换你原来的fonts.conf文件(放心,你的原fonts.conf文件将以fonts.conf.save文件保存于原目录下。想要回原来的?改回名字就就可以拉! )

7、重建并安装libXft包
***将得到的RPM包按以下顺序安装***
libXft,libXft-devel
######################################################################################

注:fontconfig和libXft这两个包,再我后来的试验中,可以不用安装。也就是说,您可以使用原来系统自带的版本编译后续的包。但是,你应确保libfontconfig1-devel和libXft-devel的包已经安装上。

8、重建并安装pango包
***将得到的RPM包按以下顺序安装***
libpango1.0_0,libpango1.0_0-modules,pango,libpango1.0_0-devel,libpango1.0_0-static-devel

9、重建并安装libpng包
***将得到的RPM包按以下顺序安装***
libpng3,libpng3-devel,libpng3-static-devel

10、重建并安装libjpeg-6b包
***将得到的RPM包按以下顺序安装***
libjpeg62,libjpeg62-devel,libjpeg-progs,libjpeg-static-devel

11、重建并安装libtiff包
***将得到的RPM包按以下顺序安装***
libtiff3,libtiff3-devel,libtiff-progs,libtiff3-static-devel

12、重建并安装gtk+2.0包
***将得到的RPM包按以下顺序安装***
libgdk_pixbuf2.0_0,gtk+2.0,libgtk+2.0_0,libgtk+-x11-2.0_0,libgdk_pixbuf2.0_0-devel,libgtk+2.0_0-devel,libgtk+2.0_0-static-devel

13、重建并安装gtk-engines2包
***将得到的RPM包按以下顺序安装***
gtk-engines2
(安装好上面的包后,你将会看到省去了使用tar包安装时候要复制engines目录的烦恼。。。)

***完成之后,就请你仔细看看gtk+2.4.x的新面孔吧! :rolleyes:***

结语
使用制作好的SRPM包的确可以免去很多重复安装步骤的烦恼,但也增添了安装时候带来的依赖顺序问题,而且使用tar包总是可以得到最新的信息。这两个方面的各有利弊,我们懂多一点,迷茫便少一点,Linux也便靠近我们一点。

(完)

作者: csyfek   发布时间: 2004-12-23

以上的SRPM包可到 http://yueru.rocklv.net/gtk_2_4_14_mdk/ 下载(顺路到版头看看MM喔!)。由于空间关系,我把它们打成了压缩包,需要的弟兄请试一下。

---------------------------------
由于网站的缘故,所有的包都已经不再提供下载了,请见到此贴的兄弟需要的话再发邮件给我或者跟贴吧。不好意思了。。。

作者: csyfek   发布时间: 2004-12-28

求教:
我按照你的方法,在安装glib2.4.8 make时,出现了下面的错误:
Making all in po
make[2]: Entering directory `/home/mwsxh/gtk/glib-2.4.8/po'
make[2]: *** 没有规则可以创建“POTFILES”需要的目标“POTFILES.in”。 停止。
make[2]: Leaving directory `/home/mwsxh/gtk/glib-2.4.8/po'
make[1]: *** [all-recursive] 错误 1
make[1]: Leaving directory `/home/mwsxh/gtk/glib-2.4.8'
make: *** [all] 错误 2
希望你能看到这个并帮我一把
非常感谢
QQ:8110098

作者: mwsxh   发布时间: 2005-02-27

不用客气!请问你使用的是什么版本??还有,你是在root的权限下面编译和安装吗?

作者: csyfek   发布时间: 2005-02-28

如果安装高的版本2.6.X
是不是也按照同样的方法?
3x

作者: linnux   发布时间: 2005-02-28

郁闷了
按照你的方法我来作的
下的glib2.4.4
编译之后安装atk1.6.0
结果却说:
checking for GLIB - version >= 2.0.0...
*** 'pkg-config --modversion glib-2.0' returned 2.4.4, but GLIB (2.4.6)
*** was found! If pkg-config was correct, then it is best
*** to remove the old version of GLib. You may also be able to fix the error
*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing
*** /etc/ld.so.conf. Make sure you have run ldconfig if that is
*** required on your system.
我是新手 刚刚开始用linux 装的mdk10.1
请问这个问题该怎么解决呢?

作者: linnux   发布时间: 2005-02-28

MDK 10.1 自带的glib版本是2.4.6,而你为它安装一个2.4.4版本。。。不是太。。。
一句话,Mandrake10.1版本已经可以很好地满足你的要求了。

作者: csyfek   发布时间: 2005-02-28

啊?
事实证明果然很盲啊:)
不好意思
我想法去卸载吧
没有了解那么多
当时就是按照你的攻略直接搞的:)

作者: linnux   发布时间: 2005-03-01