checking for GLIB – version >= 2.10.1錯誤

首先說下/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庫
我曾經編譯KDE時就犯過這個錯誤,(它須要每編譯好一個東西,都要運行一遍),因此切記改動庫文件後必定要運行一下ldconfig,在任何目錄下運行均可以。

再來講說 PKG_CONFIG_PATH這個變量吧:

常常在論壇上看到有人問」爲何我已經安裝了glib-2.4.x,可是編譯gtk+-2.4.x 仍是提示glib版本過低阿?
爲何我安裝了glib-2.4.x,仍是提示找不到阿?。。。。。。」都是這個變量搞的鬼。
先說說它是哪冒出來的,當安裝了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=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/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${libdir} -lglib-2.0
Cflags: -I${includedir}/glib-2.0 -I${libdir}/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啦
相關文章
相關標籤/搜索