- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
理解 pkg-config 工具
你在 Unix 或 Linux 下开发过软件吗?写完一个程序,编译运行完全正常,在你本机上工作得好好的,你放到源代码管理系统中。然后,告诉你的同事说,你可以取下来用了。这时,你长长的出了一口气,几天的工作没有白费,多么清新的空气啊,你开始飘飘然了。
“Hi,怎么编译不过去?”你还沉浸在那种美妙的感觉之中,双臂充满着力量,似乎没有什么问题能难倒你的。正在此时,那个笨蛋已经冲着你嚷开了。
“不会吧,我这边好好的!”表面上你说得很客气,其实,你心里已经骂开了,真笨,不知道脑子干嘛用的。也许,你想的没错,上次,他犯了一个简单的错误,不是你一去就解决了吗。
他喊三次之后,你不得不放下你手上的工作,刚才那种美妙的感觉已经消失得无影无踪了,要不是你把情绪控制得很好,一肚子气就要撒在他身上了。你走到他的电脑前,键入 make,优雅的按下回车。怎么可能出错呢?你信心十足。然而,屏幕上的结果多少有点让人脸红,该死的,libxxx.so 怎么会让不到呢?
你在/usr目录中查找 libxxx.so,一切都逃不过你的眼睛。奇怪,libxxx.so 怎么在 /usr/local/lib 下,不是应该在 /usr/lib 下的吗?这你可不能怪别人,别人想安装在哪里都行,下次还可能安装到 /lib 目录下呢。
以上的场景并非虚构,我都经历过好几次,明明在本机上好好的,在别人的机器上连编译都过不去。可能两人的操作系统一模一样,需要的库都安装上,只是由于个人 喜好不同,安装在不同的目录而已。遇到这种情况,每次都技巧性的绕过去了,用的补丁型的方法,心里老惦记其它地方能不能工作。
今天我们要介绍的 pkg-config,为解决以上问题提供了一个优美方案。从此,你再也不为此担忧了。pkg-config提供了下面几个功能:
检查库的版本号。如果所需要的库的版本不满足要求,它会打印出错误信息,避免链接错误版本的库文件。
获得编译预处理参数,如宏定义,头文件的位置。
获得链接参数,如库及依赖的其它库的位置,文件名及其它一些连接参数。
自动加入所依赖的其它库的设置。
这一切都自动的,库文件安装在哪里都没关系!
在使用前,我们说说 pkg-config 的原理,pkg-config 并非精灵,可以凭空得到以上信息。事实上,为了让pkg-config可以得到这些信息,要求库的提供者,提供一个.pc文件。比如gtk+-2.0的pc文件内容如下:
prefix=/usrexec_prefix=/usrlibdir=/usr/libincludedir=/usr/includetarget=x11
gtk_binary_version=2.4.0gtk_host=i386-redhat-linux-gnu
Name: GTK+Description: GIMP Tool Kit (${target} target)Version: 2.6.7Requires: gdk-${target}-2.0 atkLibs: -L${libdir} -lgtk-${target}-2.0Cflags: -I${includedir}/gtk-2.0
这个文件一般放在 /usr/lib/pkgconfig/ 或者 /usr/local/lib/pkgconfig/ 里,当然也可以放在其它任何地方,如像 X11 相关的pc文件是放在 /usr/X11R6/lib/pkgconfig 下的。为了让pkgconfig可以找到你的pc文件,你要把pc文件所在的路径,设置在环境变量 PKG_CONFIG_PATH 里。
使用 pkg-config 的 –cflags 参数可以给出在编译时所需要的选项,而 –libs 参数可以给出连接时的选项。例如,假设一个 sample.c 的程序用到了 Glib 库,就可以这样编译:
$ gcc -c `pkg-config –cflags glib-2.0` sample.c
然后这样连接:
$ gcc sample.o -o sample `pkg-config –libs glib-2.0`
或者上面两步也可以合并为以下一步:
$ gcc sample.c -o sample `pkg-config –cflags –libs glib-2.0`
可以看到:由于使用了 pkg-config 工具来获得库的选项,所以不论库安装在什么目录下,都可以使用相同的编译和连接命令,带来了编译和连接界面的统一。
使用 pkg-config 工具提取库的编译和连接参数有两个基本的前提:
库本身在安装的时候必须提供一个相应的 .pc 文件(不这样做的库说明不支持 pkg-config 工具的使用)。
pkg-config
您可能关注的文档
- 环境规制与易可持续发展的相关性分析.doc
- 环境影响评技术方法模拟考试13.doc
- 环境规制对苏省制造业出口贸易的影响研究.doc
- 环孢素A-H敏感性纳米粒的研究.doc
- 环氧树脂地漆涂装系列.doc
- 环线改造施组织设计.doc
- 环评爱好者坛_8.19梅河口市烘干塔报告表.doc
- 环评爱好者坛_典型资源开发项目复习要点.doc
- 环评爱好者坛_噪声污染型建设项目.doc
- 环评爱好者坛_xx煤矿环评.doc
- 2024-2025学年初中信息技术(信息科技)七年级上册(2011)沪科版(湖南)(2011)教学设计合集.docx
- 2024-2025学年小学语文小学 1-2小学生阅读指导目录(2020版)教学设计合集.docx
- 2024-2025学年小学英语四年级下册外研版(三起)(2024)教学设计合集.docx
- 2024-2025学年初中美术八年级上册岭南版(2024)教学设计合集.docx
- 2024-2025学年中职地理全一册人教版(2005)教学设计合集.docx
- 2024-2025学年初中信息技术(信息科技)七年级 第9册滇人版(旧版)教学设计合集.docx
- 2024-2025学年中职中职专业课安全教育公共课程教学设计合集.docx
- 2024-2025学年小学科学五年级下册粤教粤科版(2017秋)教学设计合集.docx
- 2024-2025学年高中数学选择性必修 第二册北师大版(2019)教学设计合集.docx
- 2024-2025学年高中音乐必修《音乐鉴赏》湘艺版教学设计合集.docx
最近下载
- 蓝色商务风奋斗到底勇攀高峰PPT.pptx
- 第1章《国际心肺复苏和心血管急救指南》要览.docx
- (部编版)语文四年级上册“小古文”阅读理解训练72篇.doc
- 苏教版小学数学四年级上册 ● 运动与身体变化 教案.docx VIP
- 组会PPT-引入强增强改善DeiT的蒸馏[CVPR2024]DeiT-LT Distillation Strikes Back for Vision Transformer Training on L.pptx
- 01检查检验结果互认工作管理制度【附流程图等7个附件】.docx VIP
- 超声内镜课件.ppt
- 国际商务11版 英文习题TBChap008.docx
- 南京铁路南站地区控制性详规.pdf
- 《法律职业伦理》课程教学大纲.docx VIP
文档评论(0)