pkg-config工具包程序编译中的使用

时间:2022-07-27 18:50:57

当程序依赖的外部库文件和头文件相对比较多时,每次建立工程都需要对这些库文件进行配置,这个过程比较繁琐,所以pkg-config工具包被开发出来,解决这一个问题。本文主要介绍如何使用pkg-config工具包,并给出opencv和Armadillo软件库才用pkg-config配置的例子。本文实在ubuntu14.04的基础上进行测试。

1. 安装pkg-config工具包

如果ubuntu系统中没有pkg-config工具包,可以通过下面的代码进行安装

sudo apt-get install pkg-config

2.设置pkg-config系统环境变量

打开/etc/bash.bashrc文件,在最后加入

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
系统开机后/etc/bash.bashrc文件中的信息会自动被系统检测,PKG_CONFIG_PATH会自动加入到系统变量中

上面的路径/usr/local/lib/pkgconfig 是存放opencv.pc和armadillo.pc等类似配置文件的地方。这样pkg-config才能够正确的找到相关库文件的配置信息。

3. opencv.pc文件解析

# Package Information for pkg-config

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

Name: OpenCV
Description: Open Source Computer Vision Library
Version: 2.4.10
Libs: ${exec_prefix}/lib/libopencv_calib3d.so ${exec_prefix}/lib/libopencv_contrib.so ${exec_prefix}/lib/libopencv_core.so
${exec_prefix}/lib/libopencv_features2d.so ${exec_prefix}/lib/libopencv_flann.so ${exec_prefix}/lib/libopencv_gpu.so
${exec_prefix}/lib/libopencv_highgui.so ${exec_prefix}/lib/libopencv_imgproc.so ${exec_prefix}/lib/libopencv_legacy.so
${exec_prefix}/lib/libopencv_ml.so ${exec_prefix}/lib/libopencv_nonfree.so ${exec_prefix}/lib/libopencv_objdetect.so
${exec_prefix}/lib/libopencv_ocl.so ${exec_prefix}/lib/libopencv_photo.so ${exec_prefix}/lib/libopencv_stitching.so
${exec_prefix}/lib/libopencv_superres.so ${exec_prefix}/lib/libopencv_ts.a ${exec_prefix}/lib/libopencv_video.so
${exec_prefix}/lib/libopencv_videostab.so -lrt -lpthread -lm -ldl
Cflags: -I${includedir_old} -I${includedir_new}# Package Information for pkg-config
上面的文件是ubuntu中 安装 opencv库后自动生成的文件,其中Libs标号后面给出了opencv常用的库文件信息。Cflags标号后面给出opencv的头文件路径信息

在每次编译使用了opencv库的工程时可以执行下面的代码:

g++ main.cpp -o main `pkg-config --cflags --libs opencv` 

4.编写armadillo.pc文件

仿照opencv.pc文件,这里编写了armadillo.pc,并将其复制到/usr/local/lib/pkgconfig目录下,这样就可以使用pkg-config工具编译使用了armadillo库的工程。

#Package Information for pkg-config

prefix=/usr/local
exec_prefix=${prefix}
libdir=${prefix}/lib

includedir=${prefix}/include/armadillo

Name: armadillo
Description: C++ linear algebra library
Version: 6.100.0
Libs: -L${libdir} -larpack -llapack -lopenblas -lf2c -lgfortran
Cflags: -I${includedir}

如果一个工程即使用了opencv也使用 armadillo,编译时只要才用下面代码即可, 使用很方便。

g++ globalPb.cpp -o globalPb -O2 `pkg-config --cflags --libs opencv armadillo`

5.总结

使用pkg-config工具包可以方便工程使用多种库文件时的编译工作。只需编写好每个库的.pc文件,并复制到PKG_CONFIG_PATH环境变量制定的目录,并可以正常使用。