pkg-config

pkg-config程序是干什么用的?简单的说就是向用户向程序提供相应库的路径、版本号等信息的程序。

譬如说我们运行以下命令:

pkg-config  查看gcc的CFLAGS参数

$pkg-config --libs --cflags opencv

会显示如下信息:

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

各位看官,你看这不就是我们用gcc编译连接时CFLAGS的参数吗?

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

这也是configure的作用,它会检查你需要的包,产生相应的信息。

那pkg-config从哪儿知道这些信息的呢?它是从包名为xxx.pc这个文件中查找到的。拿上面那个例子说,它是从opencv.pc这个文件中查知的。

那pkg-config 又怎么会知道opencv.pc这个文件呢?

下面我们看一下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

设置环境变量PKG_CONFIG_PATH方法举例如下:

export PKG_CONFIG_PATH=/cv/lib:$PKG_CONFIG_PATH

===============================================

查看一个.pc文件的内容:

[root@linuxidc pkgconfig]# cat glib-2.0.pc

prefix=/usr

exec_prefix=/usr

libdir=/lib

includedir=/usr/include

configexecincludedir=/usr/lib/glib-2.0/include

glib_genmarshal=glib-genmarshal

gobject_query=gobject-query

glib_mkenums=glib-mkenums

Name: GLib

Description: C Utility Library

Version: 2.12.3

Libs: -L${libdir} -lglib-2.0

Cflags: -I${includedir}/glib-2.0 -I${configexecincludedir}

[root@linuxidc pkgconfig]# pwd

/usr/lib/pkgconfig

可见.pc文件 是对其的库文件路径,头文件路径,版本号,Cflags等一些参数进行封装。

再来看看第一个Gtk+程序里的 `pkg-config  --cflags  --libs  gtk+-2.0`意思:

`pkg-config  --cflags  --libs  gtk+-2.0` 是pkg-config从路径/usr/lib/pkgconfig

/gtk+-2.0.pc中提取出来的用于编译用的。

[root@linuxidc pkgconfig]# cat  gtk+-2.0.pc

prefix=/usr

exec_prefix=/usr

libdir=/usr/lib

includedir=/usr/include

target=x11

gtk_binary_version=2.10.0

gtk_host=i686-RedHat-linux-gnu

Name: GTK+

Description: GIMP Tool Kit (${target} target)

Version: 2.10.4

Requires: gdk-${target}-2.0 atk cairo

Libs: -L${libdir} -lgtk-${target}-2.0

Cflags: -I${includedir}/gtk-2.0

显然,出可以自己来指定为:-L/usr/lib  -lgtk-{target}-2.0  -I/usr/include/gtk-2.0

下面来看一下{target}该是多少:

[root@linuxidc lib]# ls gt

gthumb/        gtk-2.0/      gtkhtml/

gtk/          gtk-sharp-2.0/ gtkmm-2.4/

[root@linuxidc lib]# ls gtk-2.0/

2.10.0  2.4.0  immodules  include  modules

[root@linuxidc lib]# ls gtk-sharp-2.0/

gconfsharp-schemagen.exe

[root@linuxidc lib]# pwd

/usr/lib

所以认为-lgtk-{target}-2.0中的{target}该是空字符:

-lgtk-{target}-2.0====>-lgtk--2.0

At Last So:(理论大致上:)

-L/usr/lib  -lgtk-{target}-2.0  -I/usr/include/gtk-2.0  ====>

-L/usr/lib  -lgtk--2.0  -I/usr/include/gtk-2.0

而实际上更多些:

对比pkg-config对gtk+-2.0看实际效果:

[linuxidc@linuxidc base]$ pkg-config  --cflags  --libs  gtk+-2.0

-I/usr/include/gtk-2.0  -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12  -L/lib -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0

后面还有很多的路径哦。

用pkg给手机装linux,pkg-config的使用方法相关推荐

  1. 手机装Linux开mc服务器,在Debian Linux上开启MineCraft(MC)服务器的1点经验

    在Debian Linux上开启MineCraft(MC)服务器的一点经验 我很喜欢MineCraft这个游戏,以前都用MClauncher自己做服务器自己玩,现在想和小伙伴们一起玩,正好我也有个无风 ...

  2. 苹果手机装linux系统怎么安装驱动程序,iPhone上怎么安装deb文件的教程

    deb文件格式作为Linux系统下的一种打包方式,目前已经被应用到Cydia的软件打包当中.简单来说,大家每天从Cydia商店中下载的软件都是以deb格式打包的.因此我们只要在电脑端下载好对应软件的d ...

  3. 手机装linux无root权限,linux无root权限安装screen(示例代码)

    wget -c https://ftp.gnu.org/gnu/screen/screen-4.8.0.tar.gz 解压文件 tar -xzvf screen-4.8.0.tar.gz #新建/ho ...

  4. linux pkg文件,技术|Linux 包管理基础:apt、yum、dnf 和 pkg

    介绍 大多数现代的类 Unix 操作系统都提供了一种中心化的机制用来搜索和安装软件.软件通常都是存放在存储库中,并通过包的形式进行分发.处理包的工作被称为包管理.包提供了操作系统的基本组件,以及共享的 ...

  5. 华为系统里的计算机,一个屏幕操作两个系统 让你的手机装进华为MateBook 14电脑里...

    2020春节一过全国掀起了一股在线办公.在线学习的热潮.笔者也由于特殊原因,无法回到工作室办公,只好用身边的华为MateBook 14 2020款居家远程办公. 也正是在这段日子,让笔者充分体会到华为 ...

  6. 荣耀手机装联通卡显示无服务器,荣耀X10用不了物联网卡(联通物联卡3g却不能上网)...

    提供给你一个先自检的方法1.直接将物联网卡接到一台普通安卓系统手机(单卡单待)上进行测试(如果是贴片卡则需要将管脚与手机sim卡槽触点相对应).[荣耀X10用不了物联网卡(联通物联卡3g却不能上网)] ...

  7. android 短信接口收拦截,给手机装“来点黑名单” 拒绝垃圾短信和电话

    给手机装个"来电黑名单" 有了手机之后,不自觉就被卷入信息漩涡中间.面对排山倒海的垃圾短信和骚扰电话,我们如何能拒绝?或者是"礼貌地拒绝"?其实,对于类似QQ. ...

  8. 硬盘mdr转换成gdp linux,外行给老爷机装linux系统始末

    外行给老爷机装linux系统始末 (2018-01-25 15:34:13) 台湾产华硕Z8000,2004年出厂,内存DDR1 内存升级槽在键盘下面 运行WinXP慢得想死. 老妈偏偏舍不得扔掉它. ...

  9. Linux下安装xz的方法

    Linux下安装xz的方法 cd /usr/local/pkg wget https://tukaani.org/xz/xz-5.2.3.tar.gz //下载到/usr/local/pkg目录下 t ...

最新文章

  1. SQL语句统计错误率
  2. mysqldump远程备份mysql数据库方法
  3. Missing Data in Kernel PCA
  4. 构造函数中调用构造函数new和delete使用小结
  5. ZK的实际应用:MVVM –加载和渲染数据
  6. 计算机等级考试试题4,计算机等级考试二级模拟试题4
  7. oracle 存储过程 胡勇,Oracle SQL:经典查询练手第二篇
  8. 为什么只有三次挥手_TCP为什么要三次握手?为什么要有四次挥手?
  9. datepicker 属性设置 以及方法和事件
  10. Oracle增加自增长列
  11. 运筹优化(十五)--应用模型之分配问题
  12. 今日头条php笔试题,2017年今日头条笔试题目
  13. 目标检测(二):OverFeat
  14. 记一下chrome浏览器被毒霸域名劫持解决方案
  15. python渐变色代码_python生成渐变色
  16. 为什么微信转账,对方收款要确认,而支付宝不用?
  17. 迁移学习domain adaption
  18. 深度学习环境配置避坑-CUDA11.0+DGL1.8
  19. linux中i的英文单词,Linux下gcc/g++中-I(i的大写)、-L和-l
  20. 计算机安全会议2017,科学网-第四届中国密码学与数据安全学术会议(CCDS2017)在衡阳师院召开-李浪的博文...

热门文章

  1. 对多个button触发enter操作,执行不同的操作
  2. 域名反向解析在自建邮件群发服务器中的应用
  3. vim配置及插件安装笔记
  4. 微软的100道算法面试题(一)
  5. 让PIP源使用国内镜像,提升下载速度和安装成功率。
  6. 使用牛刀云开发微信小程序(问题集锦)
  7. 由旋转画廊,看自定义RecyclerView.LayoutManager
  8. 光伏双反闹剧何时休?
  9. linux 命令行启动虚拟机
  10. AnyChat Server SDK与SDK Filter Plus有何差异?