pkg-config的用法

转载 2012年03月27日 16:17:00

最近总是用到gtk来编程序,编译的时候总是不停用pkg-config工具,可是不太会使。所以网上找了一下资料,转载一个留下来备用。

(http://yuxu9710108.blog.163.com/blog/static/237515342007215972765/)

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@yx 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@yx 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@yx 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@yx lib]# ls gt
gthumb/        gtk-2.0/       gtkhtml/      
gtk/           gtk-sharp-2.0/ gtkmm-2.4/    

[root@yx lib]# ls gtk-2.0/
2.10.0  2.4.0  immodules  include  modules

[root@yx lib]# ls gtk-sharp-2.0/
gconfsharp-schemagen.exe

[root@yx 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看实际效果:
[yuxu@yx 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 
后面还有很多的路径哦。




gtk_base.c:
#include <gtk/gtk.h>
int main(int argc,char *argv[])
{
    GtkWidget  *window;
    gtk_init(&argc,&argv);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_widget_show(window);
    gtk_main();
    return FALSE;
}

gcc   -o     gtk_base      gtk_base.c   `pkg-config   --cflags   --libs  gtk+-2.0`

相关文章推荐

pkg-config 用法简介

pkg-config 用法简介当我们写代码时,经常会调用第三方的库。这些第三方的库的安装路径在每台电脑上可能都会不同。所以如果我们把这些库的路径写死,那么别人拿到我们的代码编译时就会遇到各种问题。为了...

pkg-config的用法及库搜索路径设置

一、编译和连接         一般来说,如果库的头文件不在 /usr/include 目录中,那么在编译的时候需要用 -I 参数指定其路径。由于同一个库在不同系统上可能位于不同的目录下,用户安装库...

pkg-config的安装配置及其作用

最近在安装OpenCV1.0的时候需要用到pkg-config。 (一)、     首先到网上下载pkgconfig,地址:http://download.chinaunix.net/downloa...

pkg-config工具的使用

一、 pkg-config简介 1、关于pkg-config工具下面这篇博客有个简单的介绍,链接如下: 理解 pkg-config 工具 2、pkg-config软件官网:http://ww...

理解 pkg-config 工具

理解 pkg-config 工具 By Robin On 2011年03月22日 · 1 Comment · In OS, 信息世界 | IT 你在 Unix ...

理解 pkg-config 工具

理解 pkg-config 工具 by ROBIN on 2011年03月22日 · 6 COMMENTS · in OS, 信息世界 | IT ...

pkg-config 详解

pkg-config的种种知识,你要的都在这!!!

41 pkg-config和gtk+

通常来说gcc在编译链接linux环境下的c语言代码时会在/lib和/usr/lib中去寻找对应的库文件,如果库文件没有这两个位置的时候则需要将库文件信息添加到库文件搜索路径中,可以通过如下两种方法来...

`pkg-config --cflags --libs gtk+-2.0`的意思、作用

今天初次接触GTK+,编译时用到`pkg-config --cflags --libs gtk+-2.0`命令,不甚理解,所以搜索了一下,以下内容感觉比较实用,转载备用~ 标准C的编译是需要指...

pkg-config的使用

一、编译和连接         一般来说,如果库的头文件不在 /usr/include 目录中,那么在编译的时候需要用 -I 参数指定其路径。由于同一个库在不同系统上可能位于不同的目录下,用户安...
  • webhack
  • webhack
  • 2011年12月01日 16:35
  • 890
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:pkg-config的用法
举报原因:
原因补充:

(最多只允许输入30个字)