Linux的pkg-config命令

文章作者:Tyan
博客:noahsnail.com ?|? CSDN ?|? 簡(jiǎn)書(shū)

1. pkg-config介紹

pkg-config是一個(gè)在源代碼編譯時(shí)查詢已安裝的庫(kù)的使用接口的計(jì)算機(jī)工具軟件。pkg-config原本是設(shè)計(jì)用于Linux的,但現(xiàn)在在各個(gè)版本的BSD、windows、Mac OS X和Solaris上都有著可用的版本。
它輸出已安裝的庫(kù)的相關(guān)信息,包括:1. C/C++編譯器需要的輸入?yún)?shù);2. 鏈接器需要的輸入?yún)?shù);3. 已安裝軟件包的版本信息。

當(dāng)安裝一個(gè)庫(kù)時(shí)(例如從RPM,deb或其他二進(jìn)制包管理系統(tǒng)),會(huì)包括一個(gè)后綴名為pc的文件,它會(huì)放入某個(gè)文件夾下(依賴于你的系統(tǒng)設(shè)置)。例如,在Linux為該軟件的庫(kù)文件所在文件夾lib之下的子文件夾pkgconfig。把該子文件夾加入pkg-config的環(huán)境變量PKG_CONFIG_PATH作為搜索路徑,例如在bash配置文件中加入:

$ export PKG_CONFIG_PATH=/usr/local/庫(kù)名字/lib/pkgconfig:$PKG_CONFIG_PATH

在這個(gè).pc文件里包含有數(shù)個(gè)條目。這些條目通常包含用于其他使用這個(gè)庫(kù)的程序編譯時(shí)需要的庫(kù)設(shè)置,以及頭文件的位置,版本信息和一個(gè)簡(jiǎn)介。以O(shè)penCV為例,在Mac上pkgconfig目錄所在的路徑為:/usr/local/Cellar/opencv3/3.1.0_4/lib/pkgconfig/,目錄下的.pc文件為opencv.pc,其內(nèi)容為:

# Package Information for pkg-config

prefix=/usr/local/Cellar/opencv3/3.1.0_4
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir_old=${prefix}/include/opencv
includedir_new=${prefix}/include

Name: OpenCV
Description: Open Source Computer Vision Library
Version: 3.1.0
Libs: -L${exec_prefix}/lib -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lippicv -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_core
Libs.private: -framework OpenCL -framework Cocoa -L/usr/local/opt/jpeg/lib -ljpeg -L/usr/local/lib -lwebp -lpng -ltiff -lImath -lIlmImf -lIex -lHalf -lIlmThread -L/usr/lib -lz -framework QTKit -framework QuartzCore -framework AppKit
Cflags: -I${includedir_old} -I${includedir_new}

2. pkg-config的使用

在Linux/Mac系統(tǒng)下編寫(xiě)C、C++程序時(shí),編譯時(shí)需要包含頭文件,鏈接時(shí)需要庫(kù)文件,但安裝一些第三方庫(kù)之后不知道對(duì)應(yīng)的include文件和lib文件的位置,此時(shí)就需要pkg-config了。以opencv為例:

  • 查看頭文件位置
# 命令形式:pkg-config --cflags software_name

# demo
$ pkg-config --cflags opencv
-I/usr/local/Cellar/opencv3/3.1.0_4/include/opencv -I/usr/local/Cellar/opencv3/3.1.0_4/include
  • 查看lib庫(kù)的位置
# 命令形式:pkg-config --libs software_name

# demo
$ pkg-config --libs opencv
-L/usr/local/Cellar/opencv3/3.1.0_4/lib -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lippicv -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_core
  • 編譯程序,編譯DispalyImage.cpp文件

DispalyImage.cpp文件內(nèi)容為:

#include<iostream>
#include<opencv2/opencv.hpp>
#include<opencv2/highgui.hpp>
#include<opencv2/core.hpp>
using namespace std;
using namespace cv;
int main()
{
    Mat img = imread("./lena.bmp");
    if(!img.data)
    {
        return -1;
    }
    namedWindow("Lena", CV_WINDOW_AUTOSIZE);
    imshow("Lena", img);
    waitKey();
    return 0;
}

編譯,鏈接生成可執(zhí)行程序DisplayImage:

$ g++ -o DisplayImage $(pkg-config --cflags --libs opencv) DisplayImage.cpp

運(yùn)行結(jié)果:

Lena

參考資料:

  1. https://zh.wikipedia.org/wiki/Pkg-config
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 2014-05-26 21:21:38構(gòu)建Linux 編譯Linux BeagleBone Black 14年即將...
    外星間諜閱讀 3,496評(píng)論 0 9
  • 背景: 最近,在Nvidia的GPU嵌入式開(kāi)發(fā)板Jetson TX1(簡(jiǎn)稱TX1)上移植深度學(xué)習(xí)目標(biāo)檢測(cè)算法YOL...
    不老的老吳閱讀 1,122評(píng)論 0 0
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,381評(píng)論 25 708
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,951評(píng)論 19 139
  • 最近每周末都會(huì)看葉孤城的直播,對(duì)于我們iOS開(kāi)發(fā)者來(lái)說(shuō),確實(shí)是一個(gè)福利,很感謝他們的分享精神,收獲到的一些東西特此...
    天空中的球閱讀 2,516評(píng)論 1 12