1. 程式人生 > >PKG_CONFIG_PATH錯誤提示解決辦法

PKG_CONFIG_PATH錯誤提示解決辦法

有篇好文章,推薦大家,關於GTK的相關知識

[url]http://www.gnome-cn.org/documents/developer_doc/gtk_2_faq/2[/url]



引數說明,末尾是該程式的可用引數說明。 
./configure --prefix=/usr 指定安裝目錄,通常從原始碼包編譯安裝的軟體預設會放在/usr/local下 
因為這是FHS(Filesystem Hierarchy Standard)的規定,不知道什麼是FHS?看看這篇文章吧: 
[url]http://www.pathname.com/fhs/pub/fhs-2.3.html[/url] ;相信它會讓你對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. 
[
[email protected]
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 
[
[email protected]
~]#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

相關推薦

PKG_CONFIG_PATH錯誤提示解決辦法

有篇好文章,推薦大家,關於GTK的相關知識 [url]http://www.gnome-cn.org/documents/developer_doc/gtk_2_faq/2[/url] 引數說明,末尾是該程式的可用引數說明。  ./configure --prefix=/usr 指定安裝目錄,通常從原始碼包編

python2 安裝scrapy出現錯誤提示解決辦法~

man 提示 正常 html中 command fail 重新 解決問題 資料 首先:set STATICBUILD=true && pip install lxml 安裝環境: windows7操作系統,已經正確安裝python,pip. 使用

【Git】常見錯誤提示解決辦法和常用方法

log image 解決 遠程 添加 logs 遠程倉庫 錯誤 ima 1.添加遠程倉庫時提示fatal: remote origin already exists. 先刪除遠程倉庫,再添加遠程倉庫 最後再push 2.修改本地文件(比如README.md)後,更新到g

maven-compiler-plugin 外掛版本資訊錯誤提示解決辦法

1.maven-compiler-plugin外掛版本資訊警告提示 [WARNING] [WARNING] Some problems were encountered while building the effective model for com.mimhope.

C#調用excel導出數據時提示000208D5-0000-0000-C000-000000000046錯誤解決辦法

logs error: 版本 .com cas ima microsoft rop primary 錯誤信息:000208D5-0000-0000-C000-000000000046 Unable to cast COM object of type ‘System.__C

vscode的vetur插件提示 [vue-language-server] Elements in iteration expect to have 'v-bind:key' directives錯誤解決辦法

info bsp 設置 vs code 出現 expec 技術 問題 Language 1.使用VS Code 出現如下問題,如圖 Vue 2.2.0+的版本裏,當在組件中使用v-for時,key是必須的。 2.更改vetur配置 vscode

【LNMP】提示Nginx PHP “No input file specified”錯誤解決辦法

ted 普通 messages 進入 rec 修改 attr 打開文件 指令 原理: 任何對.php文件的請求,都簡單地交給php-cgi去處理,但沒有驗證該php文件是否存在。 PHP文件不存在,沒辦法返回普通的404錯誤,它返回 一個

win7訪問XP或者2003共享,提示密碼錯誤解決辦法

Win7使用網路共享的檔案伺服器,在輸入帳號和密碼後卻提示密碼錯誤,試驗了多次都是如此。 經過網上搜索文章及自己的研究最後發現這是由於Win7新的安全機制引起的,只要修改Win7的一個策略就可以解決這個問題。 操作具體方法:在執行裡面輸入"secpol.msc"來啟動本地安全設定,然後選擇本

MyEclipse提供比較嚴謹的js校驗功能,因此ExtJs、jQuery等前端框架匯入到MyEclipse後均會提示錯誤解決辦法

方法一: 1、在MyEclipse選擇選單欄window 2、選擇preferences 3、左側選單樹中展開myeclipse 4、選擇下面的validation 5、將右側表格中javascript validator for Js files 把Buli

Linux執行指令碼命令提示No such file or directory錯誤解決辦法

首先了解下基礎知識: python指令碼中的#!/usr/bin/python 估計有不少人注意過一些python指令碼開頭有這麼行東東: #!/usr/bin/python 它是用來幹嘛的?貌似沒有它對指令碼功能也沒啥影響。它是用來指定用什麼直譯器執行指令

Ubuntu16.04 使用sudo cat EOF 編輯檔案,提示Permission denied錯誤解決辦法

  一、執行命令報錯 在Ubuntu16.04下,使用如下命令,修改hosts主機檔案,居然提示許可權錯誤: [email protected]:~$ sudo cat <<EOF > /etc/hosts127.0.0.1 localhost192.168.1.10

K/3 CLOUD登入安裝silverlight失敗提示1603錯誤解決辦法

解決辦法如下: 1.在“新增刪除程式”中解除安裝已安裝的silverlight 雖然提示安裝失敗 但新增刪除程式中已經存在一個 silverlight 而且大小很小 和完整安裝的不一樣 ,要解除安裝掉 使用系統的解除安裝工具 不要使用360等,如果在新增刪除程式中找不到silverlight  可以嘗試在

VMWare 10.0.2虛擬機器啟動時提示“內部錯誤”的解決辦法

問題: 1. 該虛擬機器安裝有一個多月了,一直在用,不僅今天上午還在用,剛剛重啟系統前也在用,但是,重啟系統之後點選“啟動客戶機”,VMWare提示“內部錯誤”。 解決辦法: 1. 懷疑可能是內部邏輯出問題了,原來的虛擬機器狀態為“掛起客戶機”狀態; 將該虛擬機器“關機”,

VS2013中未能引用Mysql.data.dll的提示錯誤解決辦法

C#連線MySQL資料庫需要引用MySql.Data.dll 或者MySql.Web.dll   mysql.data.dll是C#操作MYSQL的驅動檔案,是c#連線mysql必要外掛,使c#語言更簡潔的操作mysql資料庫。 下面是查詢的一般路徑 因為專案需

Win7 無法訪問區域網共享檔案伺服器 提示密碼錯誤解決辦法

第一次遇到這種事情,可能也就存在於Win7 和 XP/2003之間。   今天公司同事開啟自己電腦,一切照舊的訪問伺服器共享(準備開始獲取共享檔案,開始工作了)   可當同事輸入自己的域賬號和密碼後,死活無法登陸,不管是輸入伺服器的管理員賬號密碼,還是域賬號和密碼。   W

Vs Code在Vue專案中v-for指令提示錯誤解決辦法

最近在做一個Vue專案,在其中用到v-for指令時,發現Vs Code報錯,如下圖(程式碼是沒有任何問題的),在網上找了一下解決辦法,希望能幫助到更多人。解決方法:開啟    檔案-首選項-設定將如下程

在ubuntu下安裝任何軟體時都提示軟體包 flash-plugin 需要重新安裝,但是我無法找到相應的安裝檔案的錯誤解決辦法

前兩天想把ubuntu上的flash更新一下,希望在12.10下面能在谷歌瀏覽器上看看土豆什麼的...不過問題來了,adobe公司沒給ubuntu提供.dbe的安裝檔案。所以下了一個.tar的壓縮包,

vetur外掛提示 [vue-language-server] Elements in iteration expect to have 'v-bind:key' directives錯誤解決辦法

錯誤提示: [vue-language-server] Elements in iteration expect to have 'v-bind:key' directives. Renders t

安裝Photoshop時提示安裝過程中出現錯誤解決辦法

應該是C盤中殘留之前版本的Photoshop檔案,導致當前版本安裝不了。 使用工具Search Everything搜尋,把C盤中所有Photoshop的檔案資料夾都刪除,然後就可以了。 同理,Ado

rhel 7 本地源錯誤提示解決方式

rhel7 錯誤提示 本地源rhel 7 本地源錯誤提示解決方式Repository ‘rhel-7-local-source‘: Error parsing config: Error parsing "gpgkey = ‘file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat