• pkg-config的一些用法


    https://blog.csdn.net/luotuo44/article/details/24836901

    pkg-config的一些用法
    原创 luotuo44 最后发布于2014-05-01 11:08:42 阅读数 29144 收藏
    展开

            我们在用第三方库的时候,经常会用到pkg-config这个东西来编译程序。那pkg-config究竟是什么呢?本博文简单地说一下。

     
    pkgconfig有什么用:

            大家应该都知道用第三方库,就少不了要使用到第三方的头文件和库文件。我们在编译、链接的时候,必须要指定这些头文件和库文件的位置。

            对于一个比较大第三方库,其头文件和库文件的数量是比较多的。如果我们一个个手动地写,那将是相当麻烦的。所以,pkg-config就应运而生了。pkg-config能够把这些头文件和库文件的位置指出来,给编译器使用。如果你的系统装有gtk,可以尝试一下下面的命令$pkg-config --cflags gtk+-2.0。可以看到其输出是gtk的头文件的路径。

            我们平常都是这样用pkg-config的。$gcc main.c `pkg-config --cflags --libs gtk+-2.0` -o main

            上面的编译命令中,`pkg-config --cflags --libs gtk+-2.0`的作用就如前面所说的,把gtk的头文件路径和库文件列出来,让编译去获取。--cflags和--libs分别指定头文件和库文件。

            Ps:命令中的`不是引号,而是数字1左边那个键位的那个符号。

     

            其实,pkg-config同其他命令一样,有很多选项,不过我们一般只会用到--libs和--cflags选项。更多的选项可以在这里查看。

     
    配置环境变量:

            看到这里,大家可能想试一下将pkg-config用于自己的库。下面就说一下,怎么写。

            首先要明确一点,因为pkg-config也只是一个命令,所以不是你安装了一个第三方的库,pkg-config就能知道第三方库的头文件和库文件所在的位置。pkg-config命令是通过查询XXX.pc文件而知道这些的。我们所需要做的是,写一个属于自己的库的.pc文件。

            但pkg-config又是如何找到所需的.pc文件呢?这就需要用到一个环境变量PKG_CONFIG_PATH了。这环境变量写明.pc文件的路径,pkg-config命令会读取这个环境变量的内容,这样就知道pc文件了。

            对于Ubuntu系统,可以用root权限打开/etc/bash.bashrc文件。在最后输入下面的内容。

            

            这样,pkg-config就会去/usr/local/lib/pkgconfig目录下,寻找.pc文件了。如果不是Ubuntu系统,那就没有/etc/bash.bashrc文件,可以参考我的一篇博文,来找到一个合适的文件,修改这个环境变量。输入bash命令使得配置生效。

            现在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文件。

     
    pc文件书写规范:

            好了,现在我们开始写自己的.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

            其中Name对应的内容要和这个pc文件的文件名一致。当然为了书写方便还会加入一些变量,比如前缀变量prefix。下面有一个更完整的pc文件的内容

            

            其中,Cflags和Libs的写法,是使用了-I -L -l这些gcc的编译选项。原理可以参考我的一篇博文。
    ————————————————
    版权声明:本文为CSDN博主「luotuo44」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/luotuo44/article/details/24836901

    Ubuntu 16.04 下pkg-config的安装与简介
    原创 BRUCE_WUANG 最后发布于2019-08-19 11:33:06 阅读数 3431 收藏
    展开
    1. 什么是pkg-config

    简单的说就是向用户向程序提供相应库的路径、版本号等信息的程序

    譬如说我们运行以下命令


    pkg-config  查看gcc的CFLAGS参数
    pkg-config --libs --cflags opencv

        1
        2
        3
        4

    显示

    -I/usr/include/opencv -lcxcore -lcv -lhighgui -lcvaux

        1
        2

    1.1 这不就是我们用gcc编译连接时CFLAGS的参数吗?

    因此当我们需要编译连接某个库时,我们只需要把上面那行加入gcc 的参数里面即可

    这也是configure的作用:它会检查你需要的包,产生相应的信息。
    1.2 那pkg-config从哪儿知道这些信息的呢?

    它是从包名为xxx.pc这个文件中查找到的。
    拿上面那个例子说,它是从opencv.pc这个文件中查知的。
    那pkg-config 又怎么会知道opencv.pc这个文件呢?
    1.3 pkg-config是怎样工作的?

    缺省情况下,pkg-config首 先在prefix/lib/pkgconfig/中查找相关包(譬如opencv)对应的相应的文件(opencv.pc)

    在linux上上述路径名为 /usr/lib/pkconfig/
    若是没有找到,它也会到PKG_CONFIG_PATH这个环境变量所指定的路径下去找。
    若是没有找到,它就会报 错,例如:


    Package opencv was not found in the pkg-config search path.
    Perhaps you should add the directory containing `opencv.pc'
    to the PKG_CONFIG_PATH environment variable
    No package 'opencv' found

        1
        2
        3
        4
        5
        6

    设置环境变量PKG_CONFIG_PATH方法举例如下:
    export PKG_CONFIG_PATH=/cv/lib:$PKG_CONFIG_PATH
    ————————————————
    版权声明:本文为CSDN博主「BRUCE_WUANG」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/sinat_36458870/article/details/99717672

    https://blog.csdn.net/sinat_36458870/article/details/99717672

  • 相关阅读:
    Linux 如何改变文件属性与权限: chgrp, chown, chmod
    Linux 路径与命令搜寻顺序
    Log level with log4j and Spark
    java.lang.IllegalStateException: availableProcessors is already set to [4], rejecting [4]
    max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
    JavaScript Promise异步实现章节的下载显示
    npm-folders
    the user operation is waiting for building workspace to complete解决办法
    Eclipse,新建web项目后 出现jax-ws webservice
    ServletContext在tomcat启动的时候创建
  • 原文地址:https://www.cnblogs.com/okgogo2000/p/12485497.html
Copyright © 2020-2023  润新知