Ubuntu 16.04 下pkg-config的安装与简介
原创 BRUCE_WUANG 最后发布于2019-08-19 11:33:06 阅读数 2957 收藏
展开
1. 什么是pkg-config
简单的说就是向用户向程序提供相应库的路径、版本号等信息的程序
譬如说我们运行以下命令
pkg-config 查看gcc的CFLAGS参数
pkg-config --libs --cflags opencv
显示
-I/usr/include/opencv -lcxcore -lcv -lhighgui -lcvaux
1.1 这不就是我们用gcc编译连接时CFLAGS的参数吗?
因此当我们需要编译连接某个库时,我们只需要把上面那行加入gcc 的参数里面即可
这也是configure的作用:它会检查你需要的包,产生相应的信息。
1.2 那pkg-config从哪儿知道这些信息的呢?
它是从包名为xxx.pc这个文件中查找到的。
拿上面那个例子说,它是从opencv.pc这个文件中查知的。
那pkg-config 又怎么会知道opencv.pc这个文件呢?
1.3 pkg-config是怎样工作的?
缺省情况下,pkg-config首 先在prefix/lib/pkgconfig/中查找相关包(譬如opencv)对应的相应的文件(opencv.pc)
在linux上上述路径名为 /usr/lib/pkconfig/
若是没有找到,它也会到PKG_CONFIG_PATH这个环境变量所指定的路径下去找。
若是没有找到,它就会报 错,例如:
Package opencv was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv.pc'
to the PKG_CONFIG_PATH environment variable
No package 'opencv' found
设置环境变量PKG_CONFIG_PATH方法举例如下:
export PKG_CONFIG_PATH=/cv/lib:$PKG_CONFIG_PATH
1.4 查看一个.pc文件的内容:
[root@yx pkgconfig]# cat glib-2.0.pc
prefix=/usr
exec_prefix=/usr
libdir=/lib
includedir=/usr/include
configexecincludedir=/usr/lib/glib-2.0/include
glib_genmarshal=glib-genmarshal
gobject_query=gobject-query
glib_mkenums=glib-mkenums
Name: GLib
Description: C Utility Library
Version: 2.12.3
Libs: -L${libdir} -lglib-2.0
Cflags: -I${includedir}/glib-2.0 -I${configexecincludedir}
[root@yx pkgconfig]# pwd
/usr/lib/pkgconfig
可见.pc文件 是对其的库文件路径,头文件路径,版本号,Cflags等一些参数进行封装。
上面部分来源于:http://www.cppblog.com/colorful/archive/2012/05/05/173750.html