pkg-config 用法

摘要:
在使用fuse2.9编写程序时,我们遇到了pkg config命令和。pc文件。这个博客将指定pkg-config命令是什么?Pkg-config可以指出这些头文件和库文件的位置,供编译器使用。事实上,pkg-config和其他命令一样,有很多选项,但我们通常只使用--libs和--cflags选项。首先,请明确,因为pkg配置只是一个命令,所以并不是因为您安装了第三方库。pkg-config可以知道第三方库的头文件和库文件的位置。现在,pkg配置可以找到我们的。pc文件。这需要我们在使用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 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 命令是什么了?接下来我们看它单独使用效果:


使用效果:

[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命令是通过查询XXX.pc文件而知道这些的。我们所需要做的是,写一个属于自己的库的.pc文件。

        但pkg-config又是如何找到所需的.pc文件呢?这就需要用到一个环境变量PKG_CONFIG_PATH来自己定制(当然默认找系统/usr/lib64/pkgconfig)。这环境变量写明.pc文件的路径,pkg-config命令会读取这个环境变量的内容,这样就知道pc文件了。

查看 环境变量

pkg-config 用法第1张

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

[root@docker 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 用法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[OpenGL]VS2010配置OpenGL开发环境ubuntu无法进入桌面的修复下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[转] c# 中使用opencv进行视频捕获

简介 这个项目是关于如何从网络摄像头或者视频文件(*.AVI)中捕获视频的,这个项目是用C#和OPENCV编写的。 这将有助于那些喜欢C#和OpenCV环境的人。这个程序完全基于Visual Studio 2010 version C#.NET环境。这个程序展示了怎样用C#.NET环境的Visual Studio 2010 IDE编写OpenCV,这个...

Python下opencv库的安装过程与一些问题汇总

本文主要内容是python下opencv库的安装过程,涉及我在安装时遇到的问题,并且,将从网上搜集并试用的一些解决方案进行了简单的汇总,记录下来。 由于记录的是我第一次安装opencv库的过程,所以内容涵盖可能不全面,如果有出错的地方请务必指正。下面进入主题。 关于python的下载安装不再赘述,python的版本号是我们在opencv库的安装过程中需要用...

opencv linux

http://docs.opencv.org/doc/tutorials/introduction/linux_install/linux_install.html https://www.google.com.hk/search?q=opencv+linux&ie=utf-8&oe=utf-8&gws_rd=cr&ei=f...

opencv配置过程 (cmake,vs2013,qt 5.4)

平台及软件: Windows 7 X86 Visual Studio 2013 OpenCV3.0.0 Cmake3.3 1、下载Windows下的安装文件OpenCV-3.0.0.exe,解压,选择需要的安装目录即可。(本文为F:\opencv) 注意相应的目录不能包含中文。 2、Cmake编译 执行CMake,用于把OpenCV的源码生成对应的VS工程...

Opencv cvCircle函数

cvCircle(CvArr* img, CvPoint center, int radius, CvScalar color, int thickness=1, int lineType=8, int shift=0) img为图像指针,单通道多通道都行,不须要特殊要求 center为画圆的圆心坐标 radius为圆的半径 color为...

【python-opencv】性能衡量和提升技术

在图像处理中,由于每秒要处理大量操作,因此必须使代码不仅提供正确的解决方案,而且还必须以最快的方式提供。因此,在本章中,你将学习 衡量代码的性能。 一些提高代码性能的技巧。 你将看到以下功能:cv.getTickCount,cv.getTickFrequency等。 除了OpenCV,Python还提供了一个模块time,这有助于衡量执行时间。另一个模...