pkg-config 用法
Posted xuyaowen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pkg-config 用法相关的知识,希望对你有一定的参考价值。
在进行使用fuse 2.9写程序的时候,遇到了pkg-config 命令和 .pc 文件。本篇博客就具体说明一下pkg-config 命令是什么?
我们首先看一下:
gcc -Wall hello.c `pkg-config fuse3 --cflags --libs` -o hello
[[email protected] pkgconfig]# cat fuse.pc prefix=/usr exec_prefix=/usr libdir=/usr/lib64 includedir=/usr/include Name: fuse Description: Filesystem in Userspace Version: 2.9.7 Libs: -L${libdir} -lfuse -pthread Libs.private: -ldl Cflags: -I${includedir}/fuse -D_FILE_OFFSET_BITS=64
pkg-config 简介:
DESCRIPTION pkgconf is a program which helps to configure compiler and linker flags for development libraries. This allows build systems to detect other dependencies and use them with the system toolchain.
大家应该都知道用第三方库,就少不了要使用到第三方的头文件和库文件。我们在编译、链接的时候,必须要指定这些头文件和库文件的位置。对于一个比较大第三方库,其头文件和库文件的数量是比较多的。如果我们一个个手动地写,那将是相当麻烦的。所以,pkg-config就产生了。pkg-config能够把这些头文件和库文件的位置指出来,给编译器使用。其实,pkg-config同其他命令一样,有很多选项,不过我们一般只会用到--libs和--cflags选项。更多的选项可以在这里查看。这样我们就简单了解到了pkg-config 命令是什么了?接下来我们看它单独使用效果:
使用效果:
[[email protected] pkgconfig]# pkg-config fuse --cflags --libs -I/usr/include/fuse -D_FILE_OFFSET_BITS=64 -lfuse -pthread [[email protected] pkgconfig]# pkg-config fuse --cflags -I/usr/include/fuse -D_FILE_OFFSET_BITS=64 [[email protected] pkgconfig]# pkg-config fuse --libs -lfuse -pthread
可见它就是根据配置文件中的配置信息,生成编译所需要的头文件和库文件。
.pc 文件怎么写?
首先要明确一点,因为pkg-config也只是一个命令,所以不是你安装了一个第三方的库,pkg-config就能知道第三方库的头文件和库文件所在的位置。pkg-config命令是通过查询XXX.pc文件而知道这些的。我们所需要做的是,写一个属于自己的库的.pc文件。
但pkg-config又是如何找到所需的.pc文件呢?这就需要用到一个环境变量PKG_CONFIG_PATH来自己定制(当然默认找系统/usr/lib64/pkgconfig)。这环境变量写明.pc文件的路径,pkg-config命令会读取这个环境变量的内容,这样就知道pc文件了。
查看 环境变量
这样,pkg-config就会去/usr/local/lib/pkgconfig目录下,寻找.pc文件了。
现在pkg-config能找到我们的.pc文件。但如果有多个.pc文件,那么pkg-config又怎么能正确找到我想要的那个呢?这就需要我们在使用pkg-config命令的时候去指定。比如$gcc main.c `pkg-config --cflags --libs gtk+-2.0` -o main就指定了要查找的.pc文件是gtk+-2.0.pc。又比如,有第三方库OpenCV,而且其对应的pc文件为opencv.pc,那么我们在使用的时候,就要这样写`pkg-config --cflags --libs opencv`。这样,pkg-config才会去找opencv.pc文件。
书写方法
只需写5个内容即可:Name、Description、Version、Cflags、Libs。
Name: opencv Description:OpenCV pc file Version: 2.4 Cflags:-I/usr/local/include Libs:-L/usr/local/lib –lxxx –lxxx
当然你也可查看系统中现有的pc文件,进行书写;
[[email protected] pkgconfig]# cat libxcrypt.pc ############################################# ##### Pkg-Config file for libxcrypt ##### ############################################# prefix=/usr exec_prefix=${prefix} libdir=/lib64 includedir=/usr/include Name: libxcrypt Version: 4.4.2 Description: Extended crypt library for DES, MD5, Blowfish and others Libs: -L${libdir} -lcrypt Cflags: -I${includedir}
资源来源自网络,并加以修改,转载请注明出处。https://www.cnblogs.com/xuyaowen/p/pkg-config-useage.html
以上是关于pkg-config 用法的主要内容,如果未能解决你的问题,请参考以下文章
linux ubuntu pkg-config工具的使用(源代码编译库接口查询工具)