红联Linux门户
Linux帮助

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

发布时间:2015-12-16 15:32:12来源:linux网站作者:k雪痕

当程序依赖的外部库文件和头文件相对比较多时,每次建立工程都需要对这些库文件进行配置,这个过程比较繁琐,所以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环境变量制定的目录,并可以正常使用。


pkg-config指南:http://www.linuxdiyf.com/linux/4982.html

Linux中的configure、pkg-config、pkg_config_path:http://www.linuxdiyf.com/linux/2579.html