- 浏览: 128682 次
- 性别:
- 来自: 北京
文章分类
一、glib介绍
libc指C函数库,这是一个通称,而glibc是GNU实现的libc,至于glib是一组较高层的函数库,比如链表、Hash等,在linux中glib是建立在glibc之上的,qt的库就叫做qt,也是建立在glibc和其他一些基本库之上。
GLib是Gtk +库和Gnome的基础。GLib可以在多个平台下使用,比如Linux、Unix、Windows等。GLib为许多标准的、常用的C语言结构提供了相应的替代物。
GLib中定义了好多有用的数据结构,如单(双)向连表,可变长的数组等,线程池等有用的东西。使用GLib库的程序都应该包含GLib的头文件glib.h。
Glibc 是提供系统调用和基本函数的 C 库,比如open, malloc, printf等等。所有动态连接的程序都要用到它。是GNU开发的C库。
相同点:
两者都是供调用的类库。
不同点:
glib是GTK+调用的类库。glibc中定义了好多有用的数据结构,如单(双)向连表,可变长的数组等。
glibc是GNU开发的C库。两者基本上没有太大的联系。
GLibis a general-purpose utility library, which provides many useful data types, macros, type conversions, string utilities, file utilities, a main loop abstraction, and so on. It works on many UNIX-like platforms, Windows, OS/2 and BeOS. GLib is released under the GNU Library General Public License (GNU LGPL).
The general policy of GLib is that all functions are invisibly threadsafe with the exception of data structure manipulation functions, where, if you have two threads manipulating thesame data structure, they must use a lock to synchronize their operation.
GLIBCThe GNU C library is primarily designed to be a portable and high performance C library.
It follows all relevant standards (ISO C 99, POSIX.1c, POSIX.1j, POSIX.1d, Unix98, Single Unix Specification). It is also internationalized and has one of the most complete internationalization interfaces known.
二、glib下载
下载地址:
http://ftp.acc.umu.se/pub/GNOME/sources/glib/
三、安装
执行:
./configure
make
make install
在执行./configure的时候报错:
configure: error: Package requirements (libffi >= 3.0.0) were not met:
No package 'libffi' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
(解决方法之一:export LIBFFI_CFLAGS=/usr/local/libffi/lib/libffi-3.0.10/include/
export LIBFFI_LIBS=/usr/local/libffi/lib/)
这里需要安装libffi 3.0.0以上版本
在ChinaUnix下载地址:
http://download.chinaunix.net/download/0006000/5819.shtml
或:http://sourceware.org/libffi/
依然是./configure make make install的安装方式,顺利通过。
下面是关于安装过程可能出现的问题的解决办法:
http://blog.163.com/huangbao_007/blog/static/356365352008102074129933/
如何从源码包安装软件?
从源码包安装软件最重要的就是仔细阅读README INSTALL等说明文件
它会告诉你怎样才能成功安装 :)
通常从源码包安装软件的步骤是:
tar jxvf gtk+-2.4.13.tar.bz2 解开源码包
cd gtk+-2.4.13/ 进入源码目录
./configure 似乎在某些环境下./configure会造成终端退出
而使用. configure则会正常运行,如果有这个现象,就试试 . configure
通过configure程序猜测主机信息,最终建立Makefile,以完成make,所以如果./configure不成功
而去make的话,就会出现"make: *** No targets specified and no makefile found. Stop."
make 当./configure成功结束后,就开始正式编译程序了.
make install 编译成功后使用make install安装
make uninstall 某些软件支持卸载,可能使用该方法卸载,如果支持的话,通常会在README中写到(似乎比较少)
configure程序带有很多参数,可以通过 ./configure --help 查看详细内容,通常位于前面的是常规configure的
参数说明,末尾是该程序的可用参数说明。
./configure --prefix=/usr 指定安装目录,通常从源码包编译安装的软件默认会放在/usr/local下
因为这是FHS(Filesystem Hierarchy Standard)的规定,不知道什么是FHS?看看这篇文章吧:
http://www.pathname.com/fhs/pub/fhs-2.3.html 相信它会让你对linux系统结构有更好的理解,很值得读读。
再说一下几个关系到能否成功编译的东东:/etc/ld.so.conf ldconfig PKG_CONFIG_PATH
首先说下/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就会出错了 :(
对于这种情况有两种方法解决:
一:在编译glib-2.4.x时,指定安装到/usr下,这样库文件就会放在/usr/lib中,gtk就不会找不到需要的库文件了 :)
对于安装库文件来说,这是个好办法,这样也不用设置PKG_CONFIG_PATH了 (稍后说明)
二:将/usr/local/lib加入到/etc/ld.so.conf中,这样安装gtk时就会去搜索/usr/local/lib,同样可以找到需要的库 :)
将/usr/local/lib加入到/etc/ld.so.conf也是必须的,这样以后安装东东到local下,就不会出现这样的问题了。
将自己可能存放库文件的路径都加入到/etc/ld.so.conf中是明智的选择 ^_^
添加方法也极其简单,将库文件的绝对路径直接写进去就OK了,一行一个。例如:
/usr/X11R6/lib
/usr/local/lib
/opt/lib
再来看看ldconfig是个什么东东吧 :
它是一个程序,通常它位于/sbin下,是root用户使用的东东。具体作用及用法可以man ldconfig查到
简单的说,它的作用就是将/etc/ld.so.conf列出的路径下的库文件 缓存到/etc/ld.so.cache 以供使用
因此当安装完一些库文件,(例如刚安装好glib),或者修改ld.so.conf增加新的库路径后,需要运行一下/sbin/ldconfig
使所有的库文件都被缓存到ld.so.cache中,如果没做,即使库文件明明就在/usr/lib下的,也是不会被使用的,结果
编译过程中抱错,缺少xxx库,去查看发现明明就在那放着,搞的想大骂computer蠢猪一个。 ^_^
我曾经编译KDE时就犯过这个错误,(它需要每编译好一个东东,都要运行一遍),所以
切记改动库文件后一定要运行一下ldconfig,在任何目录下运行都可以。
再来说说 PKG_CONFIG_PATH这个变量吧:
经常在论坛上看到有人问"为什么我已经安装了glib-2.4.x,但是编译gtk+-2.4.x 还是提示glib版本太低阿?
为什么我安装了glib-2.4.x,还是提示找不到阿?。。。。。。"都是这个变量搞的鬼。
先来看一个编译过程中出现的错误 (编译gtk+-2.4.13):
checking for pkg-config... /usr/bin/pkg-config
checking for glib-2.0 >= 2.4.0 atk >= 1.0.1 pango >= 1.4.0... Package glib-2.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `glib-2.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'glib-2.0' found
configure: error: Library requirements (glib-2.0 >= 2.4.0 atk >= 1.0.1 pango >= 1.4.0) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.
[root@NEWLFS gtk+-2.4.13]#
很明显,上面这段说明,没有找到glib-2.4.x,并且提示应该将glib-2.0.pc加入到PKG_CONFIG_PATH下。
究竟这个pkg-config PKG_CONFIG_PATH glib-2.0.pc 是做什么的呢? let me tell you ^_^
先说说它是哪冒出来的,当安装了pkgconfig-x.x.x这个包后,就多出了pkg-config,它就是需要PKG_CONFIG_PATH的东东
pkgconfig-x.x.x又是做什么的? 来看一段说明:
The pkgconfig package contains tools for passing the include path and/or library paths to build tools during the make file execution.
pkg-config is a function that returns meta information for the specified library.
The default setting for PKG_CONFIG_PATH is /usr/lib/pkgconfig because of the prefix we use to install pkgconfig. You may add to PKG_CONFIG_PATH by exporting additional paths on your system where pkgconfig files are installed. Note that PKG_CONFIG_PATH is only needed when compiling packages, not during run-time.
我想看过这段说明后,你已经大概了解了它是做什么的吧。
其实pkg-config就是向configure程序提供系统信息的程序,比如软件的版本啦,库的版本啦,库的路径啦,等等
这些信息只是在编译其间使用。你可以 ls /usr/lib/pkgconfig 下,会看到许多的*.pc,用文本编辑器打开
会发现类似下面的信息:
prefix=/usr
exec_prefix=$
libdir=$/lib
includedir=$/include
glib_genmarshal=glib-genmarshal
gobject_query=gobject-query
glib_mkenums=glib-mkenums
Name: GLib
Description: C Utility Library
Version: 2.4.7
Libs: -L$ -lglib-2.0
Cflags: -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
[root@NEWLFS ~]#echo $PKG_CONFIG_PATH
/opt/kde-3.3.0/lib/pkgconfig:/usr/lib/pkgconfig:/usr/local/pkgconfig:/usr/X11R6/lib/pkgconfig
从上面可以看出,安装库文件时,指定安装到/usr,是很有好处的,无论是/etc/ld.so.conf还是PKG_CONFIG_PATH
默认都会去搜索/usr/lib的,可以省下许多麻烦,不过从源码包管理上来说,都装在/usr下
管理是个问题,不如装在/usr/local下方便管理
其实只要设置好ld.so.conf,PKG_CONFIG_PATH路径后,就OK啦 ^_^
另外某些软件因为版本原因(比如emacs-21.3),在gcc-3.4.x下编译无法成功,(make 出错)
使用低版本的gcc就可能编译通过。
可能是因为gcc-3.3.x和gcc-3.4.x变化很大的缘故吧。
暂时想到了这么多,先记下这些吧,如果你对源码包编译有了一点的了解,就不枉我打了这么半天字啦。 ^_^
另外./configure 通过,make 出错,遇到这样的问题比较难办,只能凭经验查找原因,比如某个头文件没有找到,
这时候要顺着出错的位置一行的一行往上找错,比如显示xxxx.h no such file or directory 说明缺少头文件
然后去google搜。
或者找到感觉有价值的错误信息,拿到google去搜,往往会找到解决的办法。还是开始的那句话,要仔细看README,INSTALL
程序如何安装,需要什么依赖文件,等等。
另外对于newbie来说,编译时,往往不知道是否成功编译通过,而编译没有通过就去make install
必然会出错,增加了解决问题的复杂性,可以通过下面方法检查是否编译成功:
一:编译完成后,输入echo $? 如果返回结果为0,则表示正常结束,否则就出错了 :(
echo $? 表示 检查上一条命令的退出状态,程序正常退出 返回0,错误退出返回非0。
二:编译时,可以用&&连接命令, && 表示"当前一条命令正常结束,后面的命令才会执行",就是"与"啦。
这个办法很好,即节省时间,又可防止出错。例:
./configure --prefix=/usr && make && make install
参考:
http://hi.baidu.com/yuanfang/blog/item/85acd788af41c191a5c27208.html
http://yxmhero1989.blog.163.com/blog/static/1121579562011524798932/
http://bbs.chinaunix.net/thread-3592693-1-1.html
PS:
If you want to debug your own build of Wireshark on UNIX before you install the application you have to run GDB through libtool, like so:
user@host:~/src/wireshark$ libtool --mode=execute gdb wireshark
glibconfig.h路径:/usr/lib/glib-2.0/include
可将glibconfig.h拷贝到/usr/include/glib-2.0目录下
来自: http://hi.baidu.com/zboyzb/blog/item/5d605a0179a58b5b020881a4.html
发表评论
-
linux下动态库安装问题(转载)
2012-08-03 17:16 4598一般我们在Linux下执行某些外部程序的时候可能会提示找不到共 ... -
管理员必备的20个Linux系统监控工具
2012-07-27 16:11 1196需要监控Linux服务器系统性能吗?尝试下面这些系统内置 ... -
Linux VPS流量查看/监测工具 -- vnStat
2012-07-27 16:03 1797各位VPSer在使用Linux VPS的时候应该还是比较 ... -
Linux流量监控工具 - iftop (最全面的iftop教程)
2012-07-27 16:02 877在类Unix系统中可以使用top查看系统资源、进程、内存 ... -
Linux监控工具的展览馆
2012-07-27 15:49 883几乎每一个Linux发行 ... -
Linux运维不可不知的性能监控和调试工具
2012-07-27 15:46 1442前言:献给现在正在作运维或者立志作运维的朋友 syss ... -
Linux 实时查看带宽
2012-07-26 17:09 1868一、实时查看带宽bmon官方站点:http://people. ... -
Limit Search To Specific Directory Level Using mindepth and maxdepth
2012-07-23 09:58 850Limit Search To Specific Direct ... -
Linux rpm 命令参数使用详解[介绍和应用]
2012-07-16 13:33 645RPM是RedHat Package Manager(R ... -
查看linux版本
2012-07-16 13:27 690如何得知自己正在使 ... -
查看Linux是32位还是64位
2012-07-12 10:30 822查看linux机器是32位还是64位的方法: file ... -
linux 如何显示一个文件的某几行(中间几行)
2012-07-12 10:13 958【一】从第3000行开始,显示1000行。即显示3000 ... -
linux中shell变量$#,$@,$0,$1,$2的含义解释
2012-06-25 10:45 616变量说明: $$ Shell本身的PID(Proc ... -
Linux tar打包命令
2012-06-20 16:49 820范例一:将整个 /etc 目录下的文件全部打包成为 /t ... -
linux crontab 详解
2012-05-22 17:55 1703cron名词解释:系统调度 ... -
linux下free的解释
2012-05-10 18:17 793linux下free的解释: $ f ... -
Linux free详细说明
2012-05-10 18:16 792http://www.2cto.com/os/201108/9 ... -
物理CPU、物理核和逻辑核的区分
2012-05-02 16:11 3663之前看到一篇关于cpu loa ... -
Linux下判断cpu物理个数,几核,是超线程还是多核心
2012-05-02 14:41 1090from http://hi.baidu.com/coolha ... -
Linux查看CPU个数/多核/多线程的查看
2012-05-02 14:39 1582在Linux系统中,如何详 ...
相关推荐
glib安装详细教程
gettext源码,安装glib过程中需要用到
在安装qemu的时候,在你安装了zlib之后,系统可能会提示你缺少glib-2.0,那么把这个软件包下载了吧!
glib官方源码,其版本是2.12.12,在安装qemu时所需,上传于此,以供备用。
glib-2.34.2.tar.xz安装gtk+所需要的依赖包,源码安装
这个是glib2.62,以及依赖,为了保证正确地安装glib2.62
glib-2.58.0-win64-vs2017-v141-sdk10.0.17134.12 csdn-tags: glib-2.58.0 x64 vs2017v141 sdk17134 glib-2.58.0及其依赖包: bzip2-1.0.6-win64-vc141.zip glib-2.58.0-win64-vc141.zip libiconv-1.15-win64-vc...
中间包含了glib,zlib,pcre,libffi,pkg-config,目的是正确安装glib
Oracle 9i的安装包glib-devel-1.2.10-15.i386.rpm
GLib是一种底层库,创建GDK和GTK应用程序时该库提供许多有用的定义和函数。 包括基本类型及限制的定义、标准宏、类型转化、字节序、存储分配、警告和断言、消息记录、计时器、字符串工具、hook函数、句法扫描器、...
*********shenkxiao的资源********* Linux的Glib包,安装方式: 1.解压 tar -zxvf glib-2.10.1.tar.gz 2.安装 ./configure --prex="安装目录如/usr/local/" 3.完成安装.
gcc,gcc-c++,glib离线安装资源包 复制到目录后执行命令: sudo rpm -ivh *.rpm --force --nodeps
Linux用glib库,很多Linux系统需要glib库,有需要的可以下载。
glib_2.55.2,pcre,zlib,libffi,pkg_config,安装依赖脚本
离线安装包,亲测可用
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
redhat 64位安装 gcc glib-devel-1.2.10-20.el5.x86_64.rpm 需要依赖的包之一
安装zlib,freetype,libpng,jpeg以便于让PHP支持GD库(Cacti的WeatherMap插件必须要较新GD库的支持)
安装某些软件是总是缺少一些库,这是我搜索的资源希望对你有用 glib-2.22.5.tar.bz2