欢迎来到天天文库
浏览记录
ID:59333762
大小:26.65 KB
页数:6页
时间:2020-09-04
《简述configure-pkg-config-pkg-config-path三者的关系.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、简述configure,pkg-config,pkg_config_path三者的关系一、什么是configure 源码安装过程中大多会用到configure这个程序,一般的configure都是一个script,执行时可以传入必要参数告知配置项目。 configure程序它会根据传入的配置项目检查程序编译时所依赖的环境以及对程序编译安装进行配置,最终生成编译所需的Makefile文件供程序Make读入使用进而调用相关编译程式(通常调用编译程序都是gcc)来编译最终的二进制程序。而configure脚本
2、在检查相应依赖环境时(例:所依赖软件的版本、相应库版本等),通常会通过pkg-config的工具来检测相应依赖环境。 二、什么是pkg-config 1、pkg-config介绍 pkg-config用来检索系统中安装库文件的信息。典型的是用作库的编译和连接。如在Makefile中:?[Copytoclipboard]ViewCodeBASH123program:program.c ccprogram.c`pkg-config--cflags--libsgnomeui` 2、pkg-config功能
3、 一般来说,如果库的头文件不在/usr/include目录中,那么在编译的时候需要用-I参数指定其路径。由于同一个库在不同系统上可能位于不同的目录下,用户安装库的时候也可以将库安装在不同的目录下,所以即使使用同一个库,由于库的路径的不同,造成了用-I参数指定的头文件的路径和在连接时使用-L参数指定lib库的路径都可能不同,其结果就是造成了编译命令界面的不统一。可能由于编译,连接的不一致,造成同一份程序从一台机器copy到另一台机器时就可能会出现问题。 pkg-config就是用来解决编译连接界面不统一问
4、题的一个工具。 它的基本思想:pkg-config是通过库提供的一个.pc文件获得库的各种必要信息的,包括版本信息、编译和连接需要的参数等。需要的时候可以通过pkg-config提供的参数(–cflags,–libs),将所需信息提取出来供编译和连接使用。这样,不管库文件安装在哪,通过库对应的.pc文件就可以准确定位,可以使用相同的编译和连接命令,使得编译和连接界面统一。 它提供的主要功能有: <1>检查库的版本号。如果所需库的版本不满足要求,打印出错误信息,避免连接错误版本的库文件。 <2>获得编
5、译预处理参数,如宏定义,头文件的路径。 <3>获得编译参数,如库及其依赖的其他库的位置,文件名及其他一些连接参数。 <4>自动加入所依赖的其他库的设置。 3、glib-2.0的.pc文件内容举例 在默认情况下,每个支持pkg-config的库对应的.pc文件在安装后都位于安装目录中的lib/pkgconfig目录下。例如,我们在上面已经将Glib安装在/opt/gtk目录下了,那么这个Glib库对应的.pc文件是/opt/gtk/lib/pkgconfig目录下一个叫glib-2.0.pc的文件
6、:prefix=/opt/gtk/exec_prefix=${prefix}libdir=${exec_prefix}/libincludedir=${prefix}/include glib_genmarshal=glib-genmarshalgobject_query=gobject-queryglib_mkenums=glib-mkenums Name:GLibDescription:CUtilityLibraryVersion:2.12.13Libs:-L${libdir}-lglib-2.0Cfl
7、ags:-I${includedir}/glib-2.0-I${libdir}/glib-2.0/include pkg-config–list-all 列出所有可使用的包,位置在/usr/lib/pkgconfig,此目录下都是各种.pc文件。/usr/local/lib/pkgconfig下面的libname.pc文件,新软件一般都会安装.pc文件,没有可以自己创建,并且设置环境变量PKG_CONFIG_PATH寻找.pc文件路径。 使用pkg-config的–cflags参数可以给出在编译时所需
8、要的选项,而–libs参数可以给出连接时的选项。例如,假设一个sample.c的程序用到了Glib库,就可以这样编译:$gcc-c`pkg-config--cflagsglib-2.0`sample.c 然后这样连接:$gccsample.o-osample`pkg-config--libsglib-2.0` 或者上面两步也可以合并为以下一步:$gccsample.c-osample`pkg-config--
此文档下载收益归作者所有