在Fedora 14安装软件的时候遇到一个奇怪的问题。
所要安装的软件依赖glib库 2.20。 而系统自带的是2.18不满足条件。于是我安装了一个glib-2.25。但是安装完成之后查询库的版本依然是2.18.
这样就要提几个问题:
1. 系统是如何知道库的版本的?
一般来说,一个库在安装的过程中(如果是自编译的在configure阶段)会生成一个.pc文件,里面包含了库的相关信息
下面是vte库生成的.pc文件中的内容。其版本为0.27.2. 系统就是通过解析这个文件的内容来获取库的信息的。(系统并不是完全详细里面的内容,如果.pc文件里的版本信息,和实际的库不一致,系统会提示)
prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
defaultemulation=xterm
Name: vte
Description: Vte terminal widget.
Version: 0.27.2
Requires: glib-2.0 >= 2.22.0 gobject-2.0 pango >= 1.22.0 gtk+-2.0 >= 2.20.0 gobject-2.0 gio-2.0 gio-unix-2.0 x11 cairo-xlib
Libs: -L${libdir} -lvte
Cflags: -I${includedir}/vte-0.0
2.这个文件在什么地方。
这个文件在安装库的时候会自动被拷贝到pkgconfig文件夹下。
对于系统默认安装的库路径为:/usr/lib/pkgconfig
对于用户自安装的库路径为:/usr/local/lib/pkgconfig
3.为什么系统看不到新版本的库?
系统默认情况下会到/usr/lib/pkgconfig中去查找库的信息。对于/usr/local/lib/pkgconfig是无视的。
这个时候就要设置环境变量PKG_CONFIG_PATH。这样系统会优先到PKG_CONFIG_PATH中列的路径中去搜索库的信息文件。
对于文章前面描述的问题只要将PKG_CONFIG_PATH设置为/usr/local/lib/pkgconfig 就可以解决问题了。
PS: 此外,还有一个环境变量LD_LIBRARY_PATH要相应设置为/usr/local/lib否则系统会发现.pc文件描述的内容与时间的库信息不一致而报错。