• 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就会去/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

  • 相关阅读:
    C# 根据主窗体的位置弹窗信息窗体一直保持在主窗体中间
    c# winForm父子窗口 通过委托进行信息传递
    使用devexpress插件 消除运行时弹窗
    C# 获取当前时间戳
    WinForm实现Loading等待界面
    转载 C#设置控件 Enabled 为 false 时背景色不改变
    DEV gridView中加入加载条显示进度,必须为圆角型
    winfrom 圆角化
    列表元素的反转、排序——python
    使用for循环和while循环打印九九乘法表——python
  • 原文地址:https://www.cnblogs.com/xuyaowen/p/pkg-config-useage.html
Copyright © 2020-2023  润新知