zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    2020年. NET Core面试题
    java Context namespace element 'component-scan' and its parser class ComponentScanBeanDefinitionParser are only available on JDK 1.5 and higher 解决方法
    vue 淡入淡出组件
    java http的get、post、post json参数的方法
    vue 父子组件通讯案例
    Vue 生产环境解决跨域问题
    npm run ERR! code ELIFECYCLE
    Android Studio 生成apk 出现 :error_prone_annotations.jar (com.google.errorprone:error) 错误
    记忆解析者芜青【总集】
    LwIP应用开发笔记之十:LwIP带操作系统基本移植
  • 原文地址:https://www.cnblogs.com/xuyaowen/p/pkg-config-useage.html
Copyright © 2011-2022 走看看