pkg-config问题:

pkg-config是一个工具,可以用于检测相应的依赖环境。

pkg-config用来检索系统中安装库文件的信息,典型的是用作库的编译和连接。一般来说,如果库的头文件不在/usr/include目录中,那么在编译的时候需要用-I参数指定其路径。由于同一个库在不同系统上可能位于不同的目录下,用户安装库的时候也可以将库安装在不同的目录下,所以即使使用同一个库,由于库的路径的不同,造成了用-I参数指定的头文件的路径和在连接时使用-L参数指定lib库的路径都可能不同,其结果就是造成了编译命令界面的不统一。可能由于编译,连接的不一致,造成同一份程序从一台机器copy到另一台机器时就可能会出现问题。
      pkg-config 就是用来解决编译连接界面不统一问题的一个工具。基本思想:pkg-config是通过库提供的一个.pc文件获得库的各种必要信息的,包括版本信息、编译和连接需要的参数等。需要的时候可以通过pkg-config提供的参数(–cflags, –libs),将所需信息提取出来供编译和连接使用。这样,不管库文件安装在哪,通过库对应的.pc文件就可以准确定位,可以使用相同的编译和连接命令,使得编译和连接界面统一。它提供的主要功能有:

<1> 检查库的版本号。如果所需库的版本不满足要求,打印出错误信息,避免连接错误版本的库文件。
<2> 获得编译预处理参数,如宏定义,头文件的路径。
<3> 获得编译参数,如库及其依赖的其他库的位置,文件名及其他一些连接参数。
<4> 自动加入所依赖的其他库的设置。

在默认情况下,每个支持 pkg-config 的库对应的.pc文件在安装后都位于安装目录中的lib/pkgconfig目录下.新软件一般都会安装.pc文件,没有可以自己创建,并且设置环境变量PKG_CONFIG_PATH寻找.pc文件路径,否则怎么找得到呢。使用pkg-config工具提取库的编译和连接参数有两个基本的前提:

<1> 库本身在安装的时候必须提供一个相应的.pc文件。不这样做的库说明不支持pkg-config工具的使用。
<2> pkg-config必须知道要到哪里去寻找此.pc 文件。

pkg_config_path:环境变量PKG_CONFIG_PATH是用来设置.pc文件的搜索路径的,pkg-config按照设置路径的先后顺序进行搜索,直到找到指定的.pc 文件为止。这样,库的头文件的搜索路径的设置实际上就变成了对.pc文件搜索路径的设置。

在类Unix操作系统中,pkg-config会默认去搜索/usr/lib/pkconfig和/usr/share/pkgconfig目录。

我们可以通过:以下命令查看pkg-config的搜索路径:

pkg-config --variable pc_path pkg-config

参考文献:

http://blog.csdn.net/earbao/article/details/17502581

时间: 2024-10-29 19:12:55

pkg-config问题:的相关文章

GCC 命令行详解 -L 指定库的路径 -l 指定需连接的库名

为什么会出现undefined reference to 'xxxxx'错误?首先这是链接错误,不是编译错误,也就是说如果只有这个错误,说明你的程序源码本身没有问题,是你用编译器编译时参数用得不对,没有指定链接程序要用到得库,比如你的程序里用到了一些数学函数,那么你就要在编译参数里指定程序要链接数学库,方法是在编译命令行里加入-lm. -l参数和-L参数-l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢?就拿数学库来说,他的库名是m,他的库文件名是l

Centos7下安装部署MXNET

Centos下安装MXNET(类似于Amazon Linux下安装MXNET),参考官方文档http://mxnet.io/get_started/setup.html#prerequisites, 安装步骤如下: ###################################################################### # This script installs MXNet for Python along with all required depende

ffmpeg2.2.3编译安装

参考文档:http://blog.chinaunix.net/uid-23069658-id-4018842.html 下载所需解码器: lame:wget http://nchc.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz libogg:wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz libvorbis:wget http://downl

《软件调试的艺术》学习笔记——GDB使用技巧摘要

<软件调试的艺术>学习笔记——GDB使用技巧摘要 <软件调试的艺术>,因为名是The Art of Debugging with GDB, DDD, and Eclipse. 作者是美国的Norman Matloff和Peter Jay Salzman,中文版由张云翻译.是人邮出版社图灵程序设计丛书初版.这里称为"艺术",个人觉得有点过了,但是其中关于gdb以及在gdb基础之上集成的DDD和Eclipse调试技巧的整理确实是做的很好,对于Linux/开源社区下的

移植tslib和Qt5.6到三星s5pv210开发板

tslib1.4移植 下载tslib1.4后 1.cp tslib-1.4.tar.bz2 /home/gec 2.tar jxvf tslib-1.4.tar.bz2 3.sudo -s 4.cd tslib-1.4/ 5../configure --host=arm-linux --prefix=/usr/local/arm ac_cv_func_malloc_0_nonnull=yes 6.make 7.make install 修改tslib安装目录下的/etc/ts.conf文件去掉#

cisco asa config guid

因工作需要,对CISCO ASA5505进行简单的配置,参考网上的文章总结了部分简单的功能配置方法,主要是PAT,WEB SSL VPN的配置,还有简单的访问控制列表. -----  1. 设备命名-------- ciscoasa> enable ciscoasa# configure terminal ciscoasa(config)# hostname ASA5505 -----  2. 添加enable密码   ---------- ASA5505(config)# password x

MPC8313ERDB不新建pkg包,把文件放进Ramdisk

通过ltib编译生成的rootfs.ext2.gz.uboot可以直接在uboot使用,如果我们在外部编译生成了相应的文件要放到Ramdisk里面去,可以新建一个pkg包,然后再配置编译生成(这个我没有试过,,,),当然这种方法比较的麻烦,那么有一个更简单的方法,不需要新建一个pkg就可以直接把文件放进Ramdisk里面去. 要把文件放进去有两种方法: 1. 在ltib的安装目录新一个名为merge的文件夹,然后把你需要放进去的文件放到该文件夹,系统在生成Ramdisk的时候,会把merge里面

MPC8313ERDB不新鲜pkg包裹,把文件放进Ramdisk

经ltib编译器生成rootfs.ext2.gz.uboot它可以直接uboot采用.假设我们编写了相应的外部文件把Ramdisk往里走.您可以创建一个pkg包裹.然后配置编译(,.,).当然这样的方法比較的麻烦.那么有一个更简单的方法,不须要新建一个pkg就能够直接把文件放进Ramdisk里面去. 要把文件放进去有两种方法: 1. 在ltib的安装文件夹新一个名为merge的文件夹.然后把你须要放进去的文件放到该文件夹,系统在生成Ramdisk的时候,会把merge里面的全部内容复制到Ramd

uboot顶层config.mk分析

## (C) Copyright 2000-2006# Wolfgang Denk, DENX Software Engineering, [email protected]## See file CREDITS for list of people who contributed to this# project.## This program is free software; you can redistribute it and/or# modify it under the terms

golang之pkg(包)

一.概述 Golang拥有超过100个标准包(可用go list std |wc -l查看) 任何包系统设计的目的都是简化大型程序的设计和维护工作,通过将一组相关的特性放进一个独立的模块以便于理解和更新,在每个模块更新的同时保持和程序中其他模块的相对独立,这种模块化的特性允许每个包能被其他的不同项目共享和重用,在项目范围内.全局范围内的复用: 每个包一般都定义了一个不同的名字空间用于它内部的每个标识符的访问. 每个名字空间关联到一个特定的包, 让我们给类型. 函数等选择简短明了的名字, 这样可以