linux ubuntu pkg-config工具的使用(源代码编译库接口查询工具)

Posted Dontla

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux ubuntu pkg-config工具的使用(源代码编译库接口查询工具)相关的知识,希望对你有一定的参考价值。

后更。。。

文章目录

1. pkg-config介绍

pkg-config是一个在源代码编译时查询已安装的库的使用接口的计算机工具软件。pkg-config原本是设计用于Linux的,但现在在各个版本的BSD、windows、Mac OS X和Solaris上都有着可用的版本。
它输出已安装的库的相关信息,包括:

  1. C/C++编译器需要的输入参数;
  2. 链接器需要的输入参数;
  3. 已安装软件包的版本信息。

当安装一个库时(例如从RPM,deb或其他二进制包管理系统),会包括一个后缀名为pc的文件,它会放入某个文件夹下(依赖于你的系统设置)。例如,在Linux为该软件的库文件所在文件夹lib之下的子文件夹pkgconfig。把该子文件夹加入pkg-config的环境变量PKG_CONFIG_PATH作为搜索路径,例如在bash配置文件中加入:

$ export PKG_CONFIG_PATH=/usr/local/[库名字]/lib/pkgconfig:$PKG_CONFIG_PATH

在这个.pc文件里包含有数个条目。这些条目通常包含用于其他使用这个库的程序编译时需要的库设置,以及头文件的位置,版本信息和一个简介。以OpenCV为例,在Mac上pkgconfig目录所在的路径为:/usr/local/Cellar/opencv3/3.1.0_4/lib/pkgconfig/,目录下的.pc文件为opencv.pc,其内容为:

# 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系统下编写C、C++程序时,编译时需要包含头文件,链接时需要库文件,但安装一些第三方库之后不知道对应的include文件和lib文件的位置,此时就需要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库的位置
# 命令形式: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文件内容为:
#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;

编译,链接生成可执行程序DisplayImage:

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

运行结果:

参考文章:Linux的pkg-config命令

以上是关于linux ubuntu pkg-config工具的使用(源代码编译库接口查询工具)的主要内容,如果未能解决你的问题,请参考以下文章

Linux From Scratch(LFS11.0)构建 LFS 系统 - Pkg-config-0.29.2

Ubuntu 16.04 LTS 安装libvips出现”Package vips was not found in the pkg-config search path”

Linux From Scratch(LFS11.0)构建 LFS 系统 - Pkg-config-0.29.2

LFS 系列从零开始 DIY Linux 系统:构建 LFS 系统 - Pkg-config-0.28

Ubuntu 自定义环境变量 pkg-config / PKG_CONFIG_PATH

如何在 pkg-config 中使用 C++ Boost 库?