0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是pkg-config?為什么使用pkg-config?

冬至子 ? 來(lái)源:技術(shù)鋪?zhàn)?/span> ? 作者:chasenzhang ? 2023-01-18 16:14 ? 次閱讀

什么是pkg-config

pkg-config是一個(gè)linux下的命令,用于獲得某一個(gè)庫(kù)/模塊的所有編譯相關(guān)的信息,使用這個(gè)工具,我們可以很方便地編譯一個(gè)項(xiàng)目。

為什么使用pkg-config

在linux中,經(jīng)常會(huì)安裝很多第三方的模塊,我們?cè)诰幾g鏈接他們的時(shí)候需要制定頭文件、庫(kù)文件的位置,以及庫(kù)文件的名字等等。

就以O(shè)penCV為例子,如果我們用g++編譯,就需要指定頭文件庫(kù)文件的相關(guān)信息,但是因?yàn)镺penCV依賴的庫(kù)文件很多,我們指定的時(shí)候需要鏈接很多庫(kù),這就很麻煩了,比如

g++ DisplayImage.cpp -I/usr/local/include/opencv4/opencv -I/usr/local/include/opencv4 -L/usr/local/lib -lopencv_gapi -lopencv_stitching -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_cudabgsegm -lopencv_cudafeatures2d -lopencv_cudaobjdetect -lopencv_cudastereo -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_highgui -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_quality -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_cudacodec -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_videostab -lopencv_cudaoptflow -lopencv_optflow -lopencv_cudalegacy -lopencv_videoio -lopencv_cudawarping -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_cudaimgproc -lopencv_cudafilters -lopencv_imgproc -lopencv_cudaarithm -lopencv_core -lopencv_cudev

用pkg-config就可以解決這個(gè)問(wèn)題,使用很簡(jiǎn)單:

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

其實(shí)就是用pkg-config --cflags --libs opencv4這個(gè)命令代替了-I -L -lxxx.so等指令。

其實(shí)構(gòu)建OpenCV項(xiàng)目還有一種方法是cmake,關(guān)于cmake的使用方法,我們以后再介紹。

怎么使用pkg-config

這篇文建是就是根據(jù)官方文檔介紹寫(xiě)的,大家以后需要安裝什么模塊,查看使用方法的,盡量都去官網(wǎng)看一看。

pc文件

pkg-config讀后綴為pc的配置文件的,pkg-config怎么知道pc文件在哪呢?有兩個(gè)方法

1 官網(wǎng)中這樣說(shuō)的

On a typical Unix system, it will search in the directories /usr/lib/pkgconfig and /usr/share/pkgconfig

所以pc文件的路徑就在

  • /usr/lib/pkgconfig
  • /usr/share/pkgconfig 這兩個(gè)目錄下。

2 第二種就是修改PKG_CONFIG_PATH環(huán)境變量,將pc文件的路徑添加到這個(gè)環(huán)境變量中

我們可以執(zhí)行pkg-config --variable pc_path pkg-config來(lái)查看當(dāng)前pkg-config會(huì)搜索的路徑

示例

接下來(lái)我們以opencv4.pc來(lái)簡(jiǎn)單介紹下。

# Package Information for pkg-config


prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir_old=${prefix}/include/opencv4/opencv
includedir_new=${prefix}/include/opencv4


Name: OpenCV
Description: Open Source Computer Vision Library
Version: 4.2.0
Libs: -L${exec_prefix}/lib -lopencv_gapi -lopencv_stitching -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_cudabgsegm -lopencv_cudafeatures2d -lopencv_cudaobjdetect -lopencv_cudastereo -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_highgui -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_quality -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_cudacodec -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_videostab -lopencv_cudaoptflow -lopencv_optflow -lopencv_cudalegacy -lopencv_videoio -lopencv_cudawarping -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_cudaimgproc -lopencv_cudafilters -lopencv_imgproc -lopencv_cudaarithm -lopencv_core -lopencv_cudev
Libs.private: -lm -lpthread -lcudart_static -ldl -lrt -lnppc -lnppial -lnppicc -lnppicom -lnppidei -lnppif -lnppig -lnppim -lnppist -lnppisu -lnppitc -lnpps -lcublas -lcudnn -lcufft -L-L/usr/local/cuda -llib64 -L-L/usr/lib -lx86_64-linux-gnu
Cflags: -I${includedir_old} -I${includedir_new}

1 參數(shù)說(shuō)明

  • Name:模塊的名字OpenCV,注意,pkg-config是按照文件名字來(lái)查找,和這兒的name無(wú)關(guān)
  • Description:簡(jiǎn)單的描述
  • Version:模塊的版本信息
  • Libs:模塊依賴的lib的信息
  • Libs.private:木塊需要但是并未公開(kāi)出爐的鏈接庫(kù)
  • Cflags:模塊的編譯器標(biāo)志

2 執(zhí)行

$ pkg-config  --modversion opencv4
4.2.0


$ pkg-config  --cflags opencv4
-I/usr/local/include/opencv4/opencv -I/usr/local/include/opencv4


$ pkg-config  --libs opencv4
-L/usr/local/lib -lopencv_gapi -lopencv_stitching -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_cudabgsegm -lopencv_cudafeatures2d -lopencv_cudaobjdetect -lopencv_cudastereo -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_highgui -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_quality -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_cudacodec -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_videostab -lopencv_cudaoptflow -lopencv_optflow -lopencv_cudalegacy -lopencv_videoio -lopencv_cudawarping -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_cudaimgproc -lopencv_cudafilters -lopencv_imgproc -lopencv_cudaarithm -lopencv_core -lopencv_cudev

最后再來(lái)看一下編譯的指令,是不是就簡(jiǎn)單了呢

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

審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • OpenCV
    +關(guān)注

    關(guān)注

    31

    文章

    635

    瀏覽量

    41418
  • LINUX內(nèi)核
    +關(guān)注

    關(guān)注

    1

    文章

    316

    瀏覽量

    21688
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    【米爾-芯馳D9360商顯板試用評(píng)測(cè)】FFmpeg移植

    =/usr/bin/pkg-config --pkg-config=/usr/bin/pkg-config主要用于解決ERROR: x264 not found using pkg-conf
    發(fā)表于 04-16 22:48

    《深入理解FFmpeg閱讀體驗(yàn)》

    =aarch64-linux-gnu-gcc --disable-x86asm --cross-prefix=aarch64-linugnu---pkg-config=/usr/bin/pkg-config
    發(fā)表于 04-16 22:54

    pkg問(wèn)題

     在led封裝中,我看到了PKG基座還有pkg封裝的相關(guān)概念,不知道這是什么意思?請(qǐng)求幫助
    發(fā)表于 10-29 15:05

    【OK210試用體驗(yàn)】之(七)—— 交叉編譯和移植OpenCV 2.4.9 (2)

    :VMware8.0.2 + Ubuntu12.04 + arm-linux-gcc4.3.2+OpenCV2.4.9 一、配置Ubuntu中OpenCV的交叉編譯環(huán)境 1.了解pkg-config 在我的第五貼中
    發(fā)表于 12-06 21:11

    GTK---制作linux系統(tǒng)工具

    base base.c `pkg-config --cflags --libs gtk+-3.0`這里要十分小心,小渣吃過(guò)虧,就是第三行前面必須按下tab鍵,否則就等著寫(xiě)好的代碼說(shuō)編譯錯(cuò)就編譯錯(cuò)3.2
    發(fā)表于 04-26 16:31

    【BPI-M64試用體驗(yàn)】bananapi M64 源碼方式安裝opencv2.4.9

    文件的最后加入:PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfigexport PKG_CONFIG_PATH保存文件。查看opencv的版本:
    發(fā)表于 05-08 22:34

    linux環(huán)境下如何實(shí)現(xiàn)圖片的讀取和顯示

    運(yùn)行終端,編譯文件:其中編譯命令為:gcc -g `pkg-config --libs --cflags opencv` show_image.c -o show_image,其中' '符號(hào)在鍵盤(pán)左上角。運(yùn)行結(jié)果:./show_image
    發(fā)表于 07-09 06:20

    【Toybrick RK3399Pro AI開(kāi)發(fā)板試用體驗(yàn)】編譯安裝OpenCV 3.4.7

    apt-get install pkg-config libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
    發(fā)表于 08-11 17:14

    怎樣去安裝并編譯eigen呢

    apt-get install build-essential -ysudo apt-get install libgtk2.0-dev pkg-config libavcodec...
    發(fā)表于 12-23 06:57

    全源碼編譯失敗是為什么?如何解決?

    libffi was not found in the pkg-config search path.Perhaps you should add the directory containing
    發(fā)表于 01-04 07:56

    全源碼編譯失敗怎么解決?

    :Package libffi was not found in the pkg-config search path.Perhaps you should add the directory
    發(fā)表于 01-13 08:30

    請(qǐng)問(wèn)STM-IDE是否有機(jī)會(huì)支持Pkg-Config工具?

    STM-IDE不支持Pkg-Config,無(wú)法安裝。這個(gè)工具確實(shí)加快了庫(kù)選擇過(guò)程。也許有人知道 STM-IDE 支持的任何替代方案?
    發(fā)表于 12-29 08:11

    PKG-Designer Intro

    PKG-Designer is the design system which reduce the design TAT by finding the most suitable pin
    發(fā)表于 04-25 16:48 ?17次下載

    需要了解ubuntu下GTK+配置

    pkg-config是一個(gè)用來(lái)管理包的程序,在控制臺(tái)輸入pkg-config --cflags --libs gtk+-2.0,可以發(fā)現(xiàn)輸出的文本包括了gcc編譯gtk+2.0所需要的所有選項(xiàng)(頭文件目錄和庫(kù)文件)。
    發(fā)表于 04-25 17:04 ?1100次閱讀
    需要了解ubuntu下GTK+配置

    剖析ROS編譯教程

    ROS對(duì)CMake進(jìn)行了擴(kuò)展,于是便有了Catkin編譯系統(tǒng)。 Catkin是基于CMake的編譯構(gòu)建系統(tǒng),具有以下特點(diǎn): * Catkin沿用了包管理的傳統(tǒng)像 `find_package()`基礎(chǔ)結(jié)構(gòu),`pkg-config`
    的頭像 發(fā)表于 05-19 17:01 ?953次閱讀
    剖析ROS編譯教程