0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

冬至子 来源:技术铺子 作者:chasenzhang 2023-01-18 16:14 次阅读

什么是pkg-config

pkg-config是一个linux下的命令,用于获得某一个库/模块的所有编译相关的信息,使用这个工具,我们可以很方便地编译一个项目。

为什么使用pkg-config

在linux中,经常会安装很多第三方的模块,我们在编译链接他们的时候需要制定头文件、库文件的位置,以及库文件的名字等等。

就以OpenCV为例子,如果我们用g++编译,就需要指定头文件库文件的相关信息,但是因为OpenCV依赖的库文件很多,我们指定的时候需要链接很多库,这就很麻烦了,比如

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++ DisplayImage.cpp $(pkg-config --cflags --libs opencv4)

其实就是用pkg-config --cflags --libs opencv4这个命令代替了-I -L -lxxx.so等指令。

其实构建OpenCV项目还有一种方法是cmake,关于cmake的使用方法,我们以后再介绍。

怎么使用pkg-config

这篇文建是就是根据官方文档介绍写的,大家以后需要安装什么模块,查看使用方法的,尽量都去官网看一看。

pc文件

pkg-config读后缀为pc的配置文件的,pkg-config怎么知道pc文件在哪呢?有两个方法

1 官网中这样说的

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 这两个目录下。

2 第二种就是修改PKG_CONFIG_PATH环境变量,将pc文件的路径添加到这个环境变量中

我们可以执行pkg-config --variable pc_path pkg-config来查看当前pkg-config会搜索的路径

示例

接下来我们以opencv4.pc来简单介绍下。

# 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 参数说明

  • Name:模块的名字OpenCV,注意,pkg-config是按照文件名字来查找,和这儿的name无关
  • Description:简单的描述
  • Version:模块的版本信息
  • Libs:模块依赖的lib的信息
  • Libs.private:木块需要但是并未公开出炉的链接库
  • Cflags:模块的编译器标志

2 执行

$ 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

最后再来看一下编译的指令,是不是就简单了呢

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

审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • OpenCV
    +关注

    关注

    29

    文章

    624

    浏览量

    41210
  • LINUX内核
    +关注

    关注

    1

    文章

    316

    浏览量

    21605
收藏 人收藏

    评论

    相关推荐

    【米尔-芯驰D9360商显板试用评测】FFmpeg移植

    =/usr/bin/pkg-config --pkg-config=/usr/bin/pkg-config主要用于解决ERROR: x264 not found using pkg-conf
    发表于 04-16 22:48

    《深入理解FFmpeg阅读体验》

    =aarch64-linux-gnu-gcc --disable-x86asm --cross-prefix=aarch64-linugnu---pkg-config=/usr/bin/pkg-config
    发表于 04-16 22:54

    pkg问题

     在led封装中,我看到了PKG基座还有pkg封装的相关概念,不知道这是什么意思?请求帮助
    发表于 10-29 15:05

    【OK210试用体验】之(七)—— 交叉编译和移植OpenCV 2.4.9 (2)

    :VMware8.0.2 + Ubuntu12.04 + arm-linux-gcc4.3.2+OpenCV2.4.9 一、配置Ubuntu中OpenCV的交叉编译环境 1.了解pkg-config 在我的第五贴中
    发表于 12-06 21:11

    GTK---制作linux系统工具

    base base.c `pkg-config --cflags --libs gtk+-3.0`这里要十分小心,小渣吃过亏,就是第三行前面必须按下tab键,否则就等着写好的代码说编译错就编译错3.2
    发表于 04-26 16:31

    【BPI-M64试用体验】bananapi M64 源码方式安装opencv2.4.9

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

    linux环境下如何实现图片的读取和显示

    运行终端,编译文件:其中编译命令为:gcc -g `pkg-config --libs --cflags opencv` show_image.c -o show_image,其中' '符号在键盘左上角。运行结果:./show_image
    发表于 07-09 06:20

    【Toybrick RK3399Pro AI开发板试用体验】编译安装OpenCV 3.4.7

    apt-get install pkg-config libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
    发表于 08-11 17:14

    怎样去安装并编译eigen呢

    apt-get install build-essential -ysudo apt-get install libgtk2.0-dev pkg-config libavcodec...
    发表于 12-23 06:57

    全源码编译失败是为什么?如何解决?

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

    全源码编译失败怎么解决?

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

    请问STM-IDE是否有机会支持Pkg-Config工具?

    STM-IDE不支持Pkg-Config,无法安装。这个工具确实加快了库选择过程。也许有人知道 STM-IDE 支持的任何替代方案?
    发表于 12-29 08:11

    PKG-Designer Intro

    PKG-Designer is the design system which reduce the design TAT by finding the most suitable pin
    发表于 04-25 16:48 17次下载

    需要了解ubuntu下GTK+配置

    pkg-config是一个用来管理包的程序,在控制台输入pkg-config --cflags --libs gtk+-2.0,可以发现输出的文本包括了gcc编译gtk+2.0所需要的所有选项(头文件目录和库文件)。
    发表于 04-25 17:04 1068次阅读
    需要了解ubuntu下GTK+配置

    剖析ROS编译教程

    ROS对CMake进行了扩展,于是便有了Catkin编译系统。 Catkin是基于CMake的编译构建系统,具有以下特点: * Catkin沿用了包管理的传统像 `find_package()`基础结构,`pkg-config`
    的头像 发表于 05-19 17:01 868次阅读
    剖析ROS编译教程