2023年12月14日发(作者:)

pkg-config用法

在进行使用fuse 2.9写程序的时候,遇到了pkg-config 命令和 .pc 文件。本篇博客就具体说明一下pkg-config 命令是什么?

我们首先看一下:

gcc -Wall hello.c `pkg-config fuse3 --cflags --libs` -o hello

[root@docker pkgconfig]# cat

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

e: -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 命令是什么了?接下来我们看它单独使用效果:

使用效果:

[root@docker pkgconfig]# pkg-config fuse --cflags --libs

-I/usr/include/fuse -D_FILE_OFFSET_BITS=64 -lfuse -pthread

[root@docker pkgconfig]# pkg-config fuse --cflags

-I/usr/include/fuse -D_FILE_OFFSET_BITS=64

[root@docker pkgconfig]# pkg-config fuse --libs

-lfuse -pthread

可见它就是根据配置文件中的配置信息,生成编译所需要的头文件和库文件。

.pc 文件怎么写?

首先要明确一点,因为pkg-config也只是一个命令,所以不是你安装了一个第三方的库,pkg-config就能知道第三方库的头文件和库文件所在的位

置。pkg-config命令是通过查询文件而知道这些的。我们所需要做的是,写一个属于自己的库的.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+-。又比如,有第三

方库OpenCV,而且其对应的pc文件为,那么我们在使用的时候,就要这样写`pkg-config --cflags --libs opencv`。这样,pkg-config才会

去找文件。

书写方法

只需写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文件,进行书写;

[root@docker pkgconfig]# cat

#############################################

##### Pkg-Config file for libxcrypt #####

#############################################

prefix=/usrexec_prefix=${prefix}libdir=/lib64includedir=/usr/includeName: libxcryptVersion: 4.4.2Description: Extended crypt library for DES, MD5, Blowfish and othersLibs: -L${libdir} -lcryptCflags: -I${includedir}