抄襲自:
https://blog.csdn.net/luotuo44/article/details/2483690
查看
echo $PKG_CONFIG_PATH
1
pkgconfig有什么用:
大家應(yīng)該都知道用第三方庫(kù)占调,就少不了要使用到第三方的頭文件和庫(kù)文件。我們?cè)诰幾g油昂、鏈接的時(shí)候,必須要指定這些頭文件和庫(kù)文件的位置
對(duì)于一個(gè)比較大第三方庫(kù)蛙卤,其頭文件和庫(kù)文件的數(shù)量是比較多的。如果我們一個(gè)個(gè)手動(dòng)地寫(xiě)太援,那將是相當(dāng)麻煩的展哭。所以,pkg-config就應(yīng)運(yùn)而生了椎麦。pkg-config能夠把這些頭文件和庫(kù)文件的位置指出來(lái)宰僧,給編譯器使用。如果你的系統(tǒng)裝有g(shù)tk观挎,可以嘗試一下下面的命令$pkg-config --cflags gtk+-2.0琴儿。可以看到其輸出是gtk的頭文件的路徑嘁捷。
我們平常都是這樣用pkg-config的造成。
$gcc main.c `pkg-config --cflags --libs gtk+-2.0` -o main
上面的編譯命令中,`pkg-config --cflags --libs gtk+-2.0`的作用就如前面所說(shuō)的雄嚣,把gtk的頭文件路徑和庫(kù)文件列出來(lái)晒屎,讓編譯去獲取。--cflags和--libs分別指定頭文件和庫(kù)文件缓升。
Ps:命令中的`不是引號(hào)鼓鲁,而是數(shù)字1左邊那個(gè)鍵位的那個(gè)符號(hào)。
其實(shí)港谊,pkg-config同其他命令一樣骇吭,有很多選項(xiàng),不過(guò)我們一般只會(huì)用到--libs和--cflags選項(xiàng)歧寺。更多的選項(xiàng)可以在這里查看
配置環(huán)境變量:
看到這里燥狰,大家可能想試一下將pkg-config用于自己的庫(kù)。下面就說(shuō)一下斜筐,怎么寫(xiě)龙致。
首先要明確一點(diǎn),因?yàn)閜kg-config也只是一個(gè)命令顷链,所以不是你安裝了一個(gè)第三方的庫(kù)净当,pkg-config就能知道第三方庫(kù)的頭文件和庫(kù)文件所在的位置。pkg-config命令是通過(guò)查詢(xún)XXX.pc文件而知道這些的蕴潦。我們所需要做的是,寫(xiě)一個(gè)屬于自己的庫(kù)的.pc文件俘闯。
但pkg-config又是如何找到所需的.pc文件呢潭苞?這就需要用到一個(gè)環(huán)境變量PKG_CONFIG_PATH了。這環(huán)境變量寫(xiě)明.pc文件的路徑真朗,pkg-config命令會(huì)讀取這個(gè)環(huán)境變量的內(nèi)容此疹,這樣就知道pc文件了。
對(duì)于Ubuntu系統(tǒng),可以用root權(quán)限打開(kāi)/etc/bash.bashrc文件蝗碎。在最后輸入下面的內(nèi)容湖笨。
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
這樣,pkg-config就會(huì)去/usr/local/lib/pkgconfig目錄下蹦骑,尋找.pc文件了慈省。如果不是Ubuntu系統(tǒng),那就沒(méi)有/etc/bash.bashrc文件眠菇,可以參考作者的另一篇博文边败,來(lái)找到一個(gè)合適的文件,修改這個(gè)環(huán)境變量捎废。輸入bash命令使得配置生效笑窜。
現(xiàn)在pkg-config能找到我們的.pc文件。但如果有多個(gè).pc文件登疗,那么pkg-config又怎么能正確找到我想要的那個(gè)呢排截?這就需要我們?cè)谑褂胮kg-config命令的時(shí)候去指定。比如
$gcc main.c `pkg-config --cflags --libs gtk+-2.0` -o main
就指定了要查找的.pc文件是gtk+-2.0.pc辐益。又比如断傲,有第三方庫(kù)OpenCV,而且其對(duì)應(yīng)的pc文件為opencv.pc荷腊,那么我們?cè)谑褂玫臅r(shí)候艳悔,就要這樣寫(xiě)`pkg-config --cflags --libs opencv`。這樣女仰,pkg-config才會(huì)去找opencv.pc文件猜年。
pc文件書(shū)寫(xiě)規(guī)范:
好了,現(xiàn)在我們開(kāi)始寫(xiě)自己的.pc文件疾忍。只需寫(xiě)5個(gè)內(nèi)容即可:Name乔外、Description、Version一罩、Cflags杨幼、Libs。
比如簡(jiǎn)單的:
Name: opencv
Description:OpenCV pc file
Version: 2.4
Cflags:-I/usr/local/include
Libs:-L/usr/local/lib –lxxx –lxxx
其中Name對(duì)應(yīng)的內(nèi)容要和這個(gè)pc文件的文件名一致聂渊。當(dāng)然為了書(shū)寫(xiě)方便還會(huì)加入一些變量差购,比如前綴變量prefix。下面有一個(gè)更完整的pc文件的內(nèi)容
其中汉嗽,Cflags和Libs的寫(xiě)法欲逃,是使用了-I -L -l這些gcc的編譯選項(xiàng)。原理可以參考作者另一博文饼暑。
------------------------------------分割線(xiàn)-------------------
學(xué)習(xí)另一篇博文:
https://www.fujieace.com/kali-linux/pkg_config_path.html
一稳析、查看 pkg_config_path 環(huán)境變量 命令
echo $PKG_CONFIG_PATH
二洗做、查看自己的 pkgconfig 路徑在哪里?
find / -name pkgconfig
三彰居、設(shè)置 pkg_config_path 環(huán)境變量 方法
1诚纸、如果你只是想加上某庫(kù)的pkg,只需要用如下命令:
export PKG_CONFIG_PATH=/usr/lib/pkgconfig/
2陈惰、如果你想覆蓋掉原來(lái)的pkg畦徘,可選擇用此方法。因?yàn)镻KG_CONFIG_LIBDIR的優(yōu)先級(jí)比 PKG_CONFIG_PATH 高奴潘,所以會(huì)覆蓋PKG_CONFIG_PATH的設(shè)置旧烧。
export PKG_CONFIG_LIBDIR=/usr/lib/pkgconfig/
也可以使用如下命令,注意一定要放在PKG_CONFIG_PATH的前面画髓,這樣才能首先讀取掘剪。
export PKG_CONFIG_PATH=/usr/lib/pkgconfig/:$PKG_CONFIG_PATH