gtk+安装.docx
《gtk+安装.docx》由会员分享,可在线阅读,更多相关《gtk+安装.docx(7页珍藏版)》请在冰豆网上搜索。
![gtk+安装.docx](https://file1.bdocx.com/fileroot1/2022-12/17/ea7a233c-d602-4431-9d7d-49cdf210ef7f/ea7a233c-d602-4431-9d7d-49cdf210ef7f1.gif)
gtk+安装
Redhat9.0上安装gtk+-2.12.0的心得体会
一、首先介绍下个gtk包:
1.1什么是GTK+?
GTK+是一个小型而高效的控件库,具有Motif的外观和风格.实际上,它比Motif看起来好多了,它包含有基本的控件和一些很复杂的的控件:
例如文件选择控件和颜色选择控件.GTK+提供了一些独特的特性,(至少,我知道其他的控件库不提供他们),例如,按钮不提供标签,它包含了一个子控件,在很多的时候是一个标签,但是,这个子控件也可以是一个映射,图像或者任何其他的程序员想要的集合.在整个的库中,你随处可见这种伸缩性.1.2.GTK+中的是什么意思中的+是什么意思中的是什么意思?
GTK+中的+是什么意思?
PeterMattis的邮件这样表述:
我原来编写的gtk包含以下的三个库:
libglib,libgdkandlibgtk.它是一种平行的控件层次,你不能够从一个已存在的控件中得到一个新的控件,新版的gtk+包含一个比信号机制更加标准的回调机制,+用来区别原来的版本和新的版本,你可以把它看作一个加入了面向对象特性的旧版的加强版.1.3.GTK+,GDK和GLib中的G代表什么代表什么?
GTK+,GDK和GLib中的G代表什么?
GTK+==GimpToolkitGDK==GTK+DrawingKitGLib==GLibrary1.4.那里可以找到GTK+的文档的文档?
的文档那里可以找到GTK+的文档?
在GTK+发布版本的doc/文件夹下面,你可以找到GTK和GDK的参考资料,本FAQ和GTK指南.另外,你可以通过下面的网址找到这个文件HTML版本http:
//www.gtk.org/,打包的gtk指南,SGML,HTML,Postscript,DVI或text的版本可以在下面找到ftp:
//ftp.gtk.org/pub/gtk/tutorial1.5运行GTK+需要安装什么需要安装什么运行GTK+需要安装什么编译GTK+,你只需要一个c编译器(gcc),一个Xwindow系统和相关的库文件.1.6那里可以得到GTK+那里可以得到GTK+官方网站ftp:
//ftp.gtk.org/pub/gtk.一般新的GTK+版本发布的时候,这个网站都很拥挤,所以你可以试试下面列表中的镜像网站.ftp:
//ftp.gtk.org/etc/mirrors下面有一些镜像网站:
•非洲-ftp:
//ftp.is.co.za/applications/gimp•澳大利亚-ftp:
//ftp.au.gimp.org/pub/gimp•芬兰-ftp:
//ftp.funet.fi/pub/sci/graphics/packages/gimp•德国-ftp:
//infosoc.uni-koeln.de/pub/ftp.gimp.org•日本-ftp:
//SunSITE.sut.ac.jp/pub/archives/packages/gimp•英国-ftp:
//ftp.flirble.org/pub/X/gimp•美国-ftp:
//
二、安装gtk又必须依赖的库和简单的介绍
2.1基本package:
:
gtk+是基于以下三个库开发的:
glib:
gtk+与gnome的底层核心库,主要提供了C数据结构、可移植封装、运行时功能接口,譬如事件循环、多线程、动态装载和对象机制等;pango:
国际化文本陈列及渲染库,它是gtk+的文本与字体处理核心;atk:
可访问接口库。
使用ATK库,可以让你的程序很方便的使用屏幕阅读器、放大镜,以及一些输入设备等。
另外,还有cairo库也是安装gtk+所必须的。
cario,过去叫做Xr或Xr/Xc,是一个跨平台的开放源代码的矢量图形函数库,可以提供高质量的显示和打印输出。
通过Glitz函数库,Cairo能使用OpenGL或XRender扩展的硬件加速功能来绘制图像,这使得基于Cairo的应用能在现代化的3D显示硬件上获得益处。
2.2安装gtk及其附属包之前需要的需要的准备工作首先要通过命令:
(1)pkg-config--modversionxxxxxx查看Linux下已经安装了相关软件不,如:
pkg-config–modversionpango后可以查看计算机当前的pango版本。
(2)安装软件时最好先将原版的gtk等软件卸载掉,卸载软件一般采用命令:
sudorpm-eglibxxx这里是glib-2.0,如我用命令,rpm–erpm后会发生如下情况:
librpm-4.2.soisneededby(installed)perl-RPM2-0.48-4librpm-4.2.soisneededby(installed)net-snmp-5.0.6-17librpm-4.2.soisneededby(installed)rpm-python-4.2-0.69librpm-4.2.soisneededby(installed)rpm-devel-4.2-0.69librpm-4.2.soisneededby(installed)rpm-build-4.2-0.69librpmbuild-4.2.soisneededby(installed)rpm-build-4.2-0.69librpmdb-4.2.soisneededby(installed)net-snmp-5.0.6-17librpmdb-4.2.soisneededby(installed)rpm-python-4.2-0.69librpmdb-4.2.soisneededby(installed)rpm-devel-4.2-0.69librpmdb-4.2.soisneededby(installed)rpm-build-4.2-0.69librpmio-4.2.soisneededby(installed)net-snmp-5.0.6-17librpmio-4.2.soisneededby(installed)rpm-python-4.2-0.69librpmio-4.2.soisneededby(installed)rpm-devel-4.2-0.69librpmio-4.2.soisneededby(installed)rpm-build-4.2-0.69rpm=4.2isneededby(installed)rpm-python-4.2-0.69rpm>=4.1-1.05isneededby(installed)up2date-3.1.23-1rpm=4.2isneededby(installed)rpm-devel-4.2-0.69rpm=4.2isneededby(installed)rpm-build-4.2-0.69说明删除不成功,rpm不能删除,其他的软件或库会依赖rpm软件,如果强制删除会导致其他相关的软件或库不能使用。
强制删除的命令为:
sudorpm–exxx–nodeps(3)下载相关的软件:
这里我将我的成果给大家分享下http:
//www.gtk.org/http:
//www.freedesktop.org/software/fontconfig/release/http:
//www.pango.org/ftp:
//mirrors.kernel.org/gnu/gettext/gettext-0.17.tar.gz
ftp:
//ftp.gtk.org/pub/glib/2.15/glib-2.15.1.tar.bz2ftp:
//ftp.gtk.org/pub/pango/1.19/pango-1.19.0.tar.bz2http:
//ftp.gnome.org/pub/gnome/s.../atk-1.20.0.tar.bz2ftp:
//ftp.gtk.org/pub/gtk/v2.10/dependencies/jpegsrc.v6b.tar.gzftp:
//ftp.remotesensing.org/pub/libtiff/tiff-3.8.2.tar.gzftp:
//ftp.gtk.org/pub/gtk/2.12/gtk+-2.12.4.tar.bz2http:
//www.gnu.org/software/software.htmlhttp:
//ftp.gnome.org/pub/GNOME/sources/pango/http:
//cairographics.org/releases/(下载cairo)http:
//www.linuxfromscratch.org/blfs/view/svn/x/pango.html(pango下载)(下载libpangocairo和libpango等东东)当时我安装gtk时,每个版本之间的搭配弄了好长时间,那是真的是一个一个的搭配才成功的,而且有的包中含有bug,./configure或make的时候就会出现error,如果原版的软件没有删除的话也可能引起错误,当我记得当时没有进行原版软件的卸载也居然将gtk平台搭建成功了。
经过我无数次的实验与不懈的努力,终于发现下面的搭配是比较好的,至少可以成功的搭建gtk平台:
A、pkg-config-0.25.tar.gz(主要是系统已有的版本过于老旧,导致安装后续的软件不能成功)
B、pango-1.17.3.tar.gz、C、gtk+-2.12.0.tar.gz、D、glib-2.22.2.tar.gz、E、cairo-1.2.6.tar.gz、F、atk-1.9.0.tar.bz2、
(3)配置环境首先说下/etc/ld.so.conf:
这个文件记录了编译时使用的动态链接库的路径。
默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件如果你安装了某些库,比如在安装gtk+-2.4.13时它会需要glib-2.0>=2.4.0,辛苦的安装好glib后没有指定--prefix=/usr这样glib库就装到了/usr/local下,而又没有在/etc/ld.so.conf中添加/usr/local/lib这个搜索路径,所以编译gtk+-2.4.13就会出错了:
(对于这种情况有两种方法解决:
方法1:
将/usr/local/lib加入到/etc/ld.so.conf中,这样安装gtk时就会去搜索/usr/local/lib,同样
可以找到需要的库:
)将/usr/local/lib加入到/etc/ld.so.conf也是必须的,这样以后安装东东到local下,就不会出现这样的问题了。
将自己可能存放库文件的路径都加入到/etc/ld.so.conf中是明智的选择^_^添加方法也极其简单,将库文件的绝对路径直接写进去就OK了,一行一个。
例如:
通过命令:
vi/etc/ld.so.conf进入编辑/usr/X11R6/lib/usr/local/lib/opt/lib方法2:
在编译glib-2.4.x时,指定安装到/usr下,这样库文件就会放在/usr/lib中,gtk就不会找不到需要的库文件了:
)对于安装库文件来说,这是个好办法,这样也不用设置PKG_CONFIG_PATH了(不对我刚开始用这种方法,新旧库混杂,还是出错,而且不便于管理)。
安装其他软件也是一样,都可以采用上面的方法配置动态链接路径。
(4)设置pkg-config工具pkgconfig包括pkg-config程序,用来在编译脚本中向编译器传递头文件包含路径或库文件路径。
对于支持pkg-config工具的GTK+及其依赖库来说,库的头文件的搜索路径的设置变成了对.pc文件搜索路径的设置。
.pc文件的搜索路径是通过环境变量PKG_CONFIG_PATH来设置的,pkg-config将按照设置路径的先后顺序进行搜索,直到找到指定的.pc文件为止。
#exportLD_LIBRARY_PATH=/usr/local/lib#exportPKG_CONFIG_PATH=/usr/local/注意一直用该终端,否则要再设置一次注意:
命令exportPKG_CONFIG_PATH=/usr/local/exportLD_LIBRARY_PATH=/usr/local/lib可能只适用于上述方法一的情况。
三、安装:
安装:
下面的安装顺序是固定的,如果要硬是要改变安装顺序的话,那有可能安装失败(可以试一试哦,不过小心导致不听老人言,吃亏在眼前的后果,哈哈)
(1)安装glib./configuremake&&makeinstall/sbin/ldconfigexportPKG_CONFIG_PATH=/usr/local/lib/pkgconfig,先删除先删除/usr/lib/pkgconfig/glib-2.0.pc可以检验装起没有:
pkg-config--modversionglib-2.0以下也雷同检验
(2)、安装atk./configuremake&&makeinstall/sbin/ldconfig(3)、安装cairo./configuremake&&
makeinstall/sbin/ldconfig(4)安装pango./configuremake&&makeinstall/sbin/ldconfig(5)、安装gtk./configuremake&&makeinstall/sbin/ldconfig每个过程结束后,都可以用用echo$?
检查是否执行安装成功。
如果输出是0,说明配置成功;0之外的数字说明配置失败。
在Linux系统上,可以用这个方法检查一个命令或程序在其结束后返回给系统的值是多少。
一般0代表成功,非0表示程序异常退出。
(不知为什么,我默认安装的/usr/local/include/pango-1.0/pango中少了pangocairo.h,我把已经删除的/usr/local/pango-1.0/pango中的pangocairo.h拷过去就OK了)。
/usr/lib/pkgconfig由于下次还先在/usr/lib/gtk或/usr/include/gtk等,因此还是先找到原系统的止gtk(如没删除掉)[root@localhostlocal]#exportLD_LIBRARY_PATH=/usr/local/lib[root@localhostlocal]#exportPKG_CONFIG_PATH=/usr/local/这样就找在/usr/local位置的,升级的gtk了
四、出错处理
再来看看ldconfig是个什么东东吧:
它是一个程序,通常它位于/sbin下,是root用户使用的东东。
具体作用及用法可以manldconfig查到简单的说,它的作用就是将/etc/ld.so.conf列出的路径下的库文件缓存到/etc/ld.so.cache以供使用因此当安装完一些库文件,(例如刚安装好glib),或者修改ld.so.conf增加新的库路径后,需要运行一下/sbin/ldconfig使所有的库文件都被缓存到ld.so.cache中,如果没做,即使库文件明明就在/usr/lib下的,也是不会被使用的,结果编译过程中抱错,缺少xxx库,去查看发现明明就在那放着,搞的想大骂computer蠢猪一个。
^_^我曾经编译KDE时就犯过这个错误,(它需要每编译好一个东东,都要运行一遍),所以切记改动库文件后一定要运行一下ldconfig,在任何目录下运行都可以。
(每个过程结束后,都可以用用echo$?
检查是否执行安装成功。
如果输出是0,说明配置成功;0之外的数字说明配置失败。
在Linux系统上,可以用这个方法检查一个命令或程序在其结束后返回给系统的值是多少。
一般0代表成功,非0表示程序异常退出。
)再来说说PKG_CONFIG_PATH这个变量吧:
经常在论坛上看到有人问"为什么我已经安装了glib-2.4.x,但是编译gtk+-2.4.x还是提示glib版本太
低阿?
为什么我安装了glib-2.4.x,还是提示找不到阿?
………………………………………….."都是这个变量搞的鬼。
假如将glib-2.x.x装到了/usr/local/下,那么glib-2.0.pc就会在/usr/local/lib/pkgconfig下,将这个路径添加到PKG_CONFIG_PATH下就可以啦。
并且确保configure找到的是正确的glib-2.0.pc,就是将其他的lib/pkgconfig目录glib-2.0.pc干掉就是啦。
(如果有的话^-^)先来看一个编译过程中出现的错误(编译gtk+-2.4.13):
checkingforpkg-config/usr/bin/pkg-configcheckingforglib-2.0>=2.4.0atk>=1.0.1pango>=1.4.0Packageglib-2.0wasnotfoundinthepkg-configsearchpath.Perhapsyoushouldaddthedirectorycontaining`glib-2.0.pc'tothePKG_CONFIG_PATHenvironmentvariableNopackage'glib-2.0'foundconfigure:
error:
Libraryrequirements(glib-2.0>=2.4.0atk>=1.0.1pango>=1.4.0)notmet;consideradjustingthePKG_CONFIG_PATHenvironmentvariableifyourlibrariesareinanonstandardprefixsopkg-configcanfindthem.[root@NEWLFSgtk+-2.4.13]#很明显,上面这段说明,没有找到glib-2.4.x,并且提示应该将glib-2.0.pc加入到PKG_CONFIG_PATH下。
究竟这个pkg-configPKG_CONFIG_PATHglib-2.0.pc是做什么的呢?
letmetellyou^_^先说说它是哪冒出来的,当安装了pkgconfig-x.x.x这个包后,就多出了pkg-config,它就是需要PKG_CONFIG_PATH的东东pkgconfig-x.x.x又是做什么的?
来看一段说明:
Thepkgconfigpackagecontainstoolsforpassingtheincludepathand/orlibrarypathstobuildtoolsduringthemakefileexecution.pkg-configisafunctionthatreturnsmetainformationforthespecifiedlibrary.ThedefaultsettingforPKG_CONFIG_PATHis/usr/lib/pkgconfigbecauseoftheprefixweusetoinstallpkgconfig.YoumayaddtoPKG_CONFIG_PATHbyexportingadditionalpathsonyoursystemwherepkgconfigfilesareinstalled.NotethatPKG_CONFIG_PATHisonlyneededwhencompilingpackages,notduringrun-time.
我想看过这段说明后,你已经大概了解了它是做什么的吧。
其实pkg-config就是向configure程序提供系统信息的程序,比如软件的版本啦,库的版本啦,库的路径啦,等等这些信息只是在编译其间使用。
你可以ls/usr/lib/pkgconfig下,会看到许多的*.pc,用文本编辑器打开会发现类似下面的信息:
prefix=/usrexec_prefix=$libdir=$/libincludedir=$/include
glib_genmarshal=glib-genmarshalgobject_query=gobject-queryglib_mkenums=glib-mkenumsName:
GLibDescription:
CUtilityLibraryVersion:
2.4.7Libs:
-L$-lglib-2.0Cflags:
-I$/glib-2.0-I$/glib-2.0/include
明白了吧,configure就是靠这些信息判断你的软件版本是否符合要求。
并且得到这些东东所在的位置,要不去哪里找呀。
不用我说你也知道为什么会出现上面那些问题了吧。
解决的办法很简单,设定正确的PKG_CONFIG_PATH,假如将glib-2.x.x装到了/usr/local/下,那么glib-2.0.pc就会在/usr/local/lib/pkgconfig下,将这个路径添加到PKG_CONFIG_PATH下就可以啦。
并且确保configure找到的是正确的glib-2.0.pc,就是将其他的lib/pkgconfig目录glib-2.0.pc干掉就是啦。
(如果有的话^-^)设定好后可以加入到~/.bashrc中,例如:
PKG_CONFIG_PATH=/opt/kde-3.3.0/lib/pkgconfig:
/usr/lib/pkgconfig:
/usr/local/pkgconfig:
/usr/X11R6/lib/pkgconfig
编译gtk程序时