zoukankan      html  css  js  c++  java
  • [Ubuntu]pkg-config和ldconfig

    转载自->这里  

      我们知道,linux编译源码包基本步骤无非是:configure,make,make install三部曲;configure过程中可能会遇到无法找到某些头文件和动态库;原因有两个:

           (1)系统压根就没有这些头文件和动态库。(locate XXXX.h/so 未找到)

           (2)已经安装相关的头文件和动态库。但未将头文件和动态库拷贝到标准路径下。

      对于第(2)中情况,我们可以通过配置PKG_CONFIG_PATH环境变量来解决头文件和动态库无法找到的问题;

           先介绍一下pkg-config的用法:

           pkg-config命令经常被用于Makefile文件用来找寻头文件和动态链接库,最常用的方式:

    [root@localhost ~]# pkg-config --cflags --libs libcfg  
    -I/ext/corosync/include  -L/ext/corosync/lib -lcfg   

      上述命令用于返回libcfg.so的链接路径,以及相关的头文件路径。

           pkg-config是如何找到libcfg.so的存放路径和头文件的存放路径的呢?pkg-config会查找libcfg.pc文件;该文件存

    放了头文件和动态链接库的路径存放信息;libcfg.pc文件内容如下:

    prefix=/ext/corosync
    exec_prefix=${prefix}
    libdir=/ext/corosync/lib
    includedir=${prefix}/include
    
    Name: cfg
    Version: 1.3.3
    Description: cfg
    Requires: 
    Libs: -L${libdir} -lcfg
    Cflags: -I${includedir}

       那么pkg-config如何找到libcfg.pc文件的呢?相信同学们肯定猜到了,就是PKG_CONFIG_PATH环境变量;一般情况下动态库都存放在安装目录下的lib目录下,libcfg.so存放在/ext/corosync/lib/目录下;同时该目录下有一个pkgconfig目录,相信经常编译源代码的同学对这个目录并不陌生,该目录下存放的就是*.pc文件,存放着我们的动态库和头文件路径元数据。通过设置PKG_CONFIG_PATH为我们/ext/corosync/lib/pkgconfig;pkg-config命令就可以轻松找到*.pc

    文件,进而找到路径信息。

      好了,经过上述设置后,configure便可以顺利的生成Makefile文件了。make,make install就可以了。

      到此为止,我们仅仅完成了程序的编译和链接,还有最后一步,程序运行;程序运行需要加载动态链接库并运行,也需要找寻动态链接库的路径,pkg-config仅负责编译链接时头文件和动态链接库的查找。对于程序运行时加载动态链接库,pkg-config就无能为力了,此时需要用到ldconfig命令,该命令为程序运行时提供动态链接库的运行时绑定,通过加载/etc/ld.so.conf下的路径信息,生成动态库的缓存/etc/ld.so.cache,为程序运行时提供动态库的链接;通过ldconfig -p查看动态链接库缓存信息。因此需要将我们的动态链接库路径添加到/etc/ld.so.conf中,运行ldconfig更新cache,就大功告成了。

  • 相关阅读:
    函数
    字符串格式化
    集合
    习题02
    int/str/list/tuple/dict必会
    元组/字典
    列表方法
    练习题(format、expandtabs、片层)
    字符串方法
    JMM
  • 原文地址:https://www.cnblogs.com/DLarTisan/p/8594604.html
Copyright © 2011-2022 走看看