PKG_CONFIG_PATH錯誤提示解決辦法
[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.
[
很明顯,上面這段說明,沒有找到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
[
/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