pkg-config 與.pc文件

抄襲自:
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)容

完整的.pc文件.jpg

其中汉嗽,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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市奈虾,隨后出現(xiàn)的幾起案子夺谁,更是在濱河造成了極大的恐慌,老刑警劉巖肉微,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匾鸥,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡碉纳,警方通過(guò)查閱死者的電腦和手機(jī)勿负,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)劳曹,“玉大人奴愉,你說(shuō)我怎么就攤上這事√酰” “怎么了锭硼?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蜕劝。 經(jīng)常有香客問(wèn)我檀头,道長(zhǎng),這世上最難降的妖魔是什么岖沛? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任暑始,我火速辦了婚禮,結(jié)果婚禮上婴削,老公的妹妹穿的比我還像新娘蒋荚。我一直安慰自己,他們只是感情好馆蠕,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布期升。 她就那樣靜靜地躺著,像睡著了一般互躬。 火紅的嫁衣襯著肌膚如雪播赁。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,772評(píng)論 1 290
  • 那天吼渡,我揣著相機(jī)與錄音容为,去河邊找鬼。 笑死寺酪,一個(gè)胖子當(dāng)著我的面吹牛坎背,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播寄雀,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼得滤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了盒犹?” 一聲冷哼從身側(cè)響起懂更,我...
    開(kāi)封第一講書(shū)人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎急膀,沒(méi)想到半個(gè)月后沮协,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡卓嫂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年慷暂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晨雳。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡行瑞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出悍募,到底是詐尸還是另有隱情蘑辑,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布坠宴,位于F島的核電站洋魂,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏喜鼓。R本人自食惡果不足惜副砍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望庄岖。 院中可真熱鬧豁翎,春花似錦、人聲如沸隅忿。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至优烧,卻和暖如春蝉揍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背畦娄。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工又沾, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人熙卡。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓杖刷,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親驳癌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子滑燃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容