pkg-config工具的使用

首先关于转载,只是为了自己学习备忘,请大家支持原博主:http://blog.csdn.net/ccf19881030/article/details/9042733


一、 pkg-config简介

1、关于pkg-config工具下面这篇博客有个简单的介绍,链接如下:

理解 pkg-config 工具

2、pkg-config软件官网:http://www.freedesktop.org/wiki/Software/pkg-config/

 二、最近在看glib、dbus、gtk的一些例子程序,在编译程序时经常找不到头文件和库文件路径。并且使用cmake进行rpm打包和编译时会使用到pkg-config这个实用的工具。

    pkg-config能根据软件安装时软件的.pc配置文件路径找到相应的头文件路径和库文件路径,如我的ubuntu12.04下默认安装glib-2.0后在 /usr/lib/i386-linux-gnu/pkgconfig/

路径下有glib-2.0.pc,其内容如下:

[plain]  view plain copy
  1. <span style="font-size:14px;">prefix=/usr  
  2. exec_prefix=${prefix}  
  3. libdir=${prefix}/lib/i386-linux-gnu  
  4. includedir=${prefix}/include  
  5.   
  6. glib_genmarshal=glib-genmarshal  
  7. gobject_query=gobject-query  
  8. glib_mkenums=glib-mkenums  
  9.   
  10. Name: GLib  
  11. Description: C Utility Library  
  12. Version: 2.32.3  
  13. Requires.private: libpcre  
  14. Libs: -L${libdir} -lglib-2.0   
  15. Libs.private: -pthread -lrt  -lpcre      
  16. Cflags: -I${includedir}/glib-2.0 -I${libdir}/glib-2.0/include </span>  

根据glib-2.0.pc文件的描述我们可以看到使用sudo apt-get install glib-2.0后glib-2.0的各个文件存放路径如下:

可执行文件安装路径:/usr

.h头文件安装路径为:/usr/include/glib-2.0和/usr/lib/i386-linux-gnu/glib-2.0/include 

.so库文件安装路径为:/usr/lib/i386-linux-gnu


三、在ubuntu12.04下安装好glib-2.0和gtk+-2.0后,下面来看两个例子。

1、一个使用了glib库的简单程序hello.c,代码如下:

[cpp]  view plain copy
  1. <span style="font-size:14px;">//hello.c  
  2. #include <glib.h>  
  3.   
  4. int main(int argc, char *argv[])  
  5. {  
  6.     g_print("welcome to glib programming world!\n");  
  7.   
  8.     return 0;  
  9. }</span>  

打开终端,输入
gcc -o hello hello.c `pkg-config --cflags --libs glib-2.0`(注意:此处不是单引号,而是键盘左边数字键'1'左侧、Tab键上侧的[`]),千万别弄错哦!)

[plain]  view plain copy
  1. <span style="font-size:14px;">ccf@ccf-F81Se:~/WorkPlace/Glib库学习$ gcc -o hello hello.c `pkg-config --cflags --libs glib-2.0`  
  2. ccf@ccf-F81Se:~/WorkPlace/Glib库学习$ ls  
  3. dbus-glib示例说明.ppt  glib-2.34.3-docs    glib-notes.tar.gz    GLIB 库简介  ~  GmainLoop.c~  loop      Thread_Pools_glib.pdf  
  4. Event_loop.html        glib-2.34.3.tar.xz  Glib库的安装和编译?  gmain_demo.c~   hello         loop.c    理解pkg-config工具  
  5. glib-2.34.3            glib-notes          GLIB 库简介          GmainLoop.c     hello.c       makefile  理解pkg-config工具~  
  6. ccf@ccf-F81Se:~/WorkPlace/Glib库学习$ ./hello   
  7. welcome to glib programming world!  
  8. ccf@ccf-F81Se:~/WorkPlace/Glib库学习$   
  9. </span>  

2、一个简单的gtk程序

[cpp]  view plain copy
  1. <span style="font-size:14px;">/* 
  2. *File name: gtkbase.c 
  3. */  
  4.   
  5. //#include <gtk-2.0/gtk/gtk.h>  
  6. #include <gtk/gtk.h>  
  7. //#include <gtk.h> //使用此路径会编译失败,找不到头文件!  
  8.   
  9. int main(int argc,char* argv[])  
  10. {  
  11.     GtkWidget *wnd;  
  12.     gtk_init(&argc,&argv);  
  13.      
  14.     wnd=gtk_window_new(GTK_WINDOW_TOPLEVEL);  
  15.     gtk_widget_show(wnd);  
  16.   
  17.     gtk_main();  
  18.     return 0;  
  19. }</span>  

在终端编译敲如命令:gcc gtkbase.c -o gtkbase `pkg-config --cflags --libs gtk+-2.0 gthread-2.0`

[plain]  view plain copy
  1. <span style="font-size:14px;">ccf@ccf-F81Se:~/WorkPlace/gtk$ ls  
  2. GTK2.0 编译问题    gtkbase.c   makefile    threadloop.c  
  3. GTK2.0 编译问题 ~  gtkbase.c~  threadloop  
  4. ccf@ccf-F81Se:~/WorkPlace/gtk$ gcc gtkbase.c -o gtkbase `pkg-config --cflags --libs gtk+-2.0 gthread-2.0`  
  5. ccf@ccf-F81Se:~/WorkPlace/gtk$ ./gtkbase </span>  


为了简单起见,可以写一个简单的makefile文件,这样的话每次编译只需改动很少的部分就行了,在终端键入make或make clean就OK了。

[plain]  view plain copy
  1. <span style="font-size:14px;">#makefile for gtkbase  
  2. APP_NAME=gtkbase  
  3. CC=gcc  
  4. RM=-rm -f  
  5. LIBS=`pkg-config --cflags --libs gtk+-2.0 gthread-2.0`  
  6.   
  7. $(APP_NAME):$(APP_NAME).c  
  8.     gcc $< -o $@ $(LIBS)  
  9.   
  10. .PHNOY:clean  
  11. clean:  
  12.     $(RM) *.o $(APP_NAME)</span>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值