Quantcast
Channel: Sam的技术Blog
Viewing all articles
Browse latest Browse all 158

pkg-config在交叉编译过程中的使用探讨

$
0
0
作者:Sam (甄峰)  sam_code@hotmail.com

在研究autoconf时,必然要研究到pkg-config,它非常好用。在x86-64系统下能极大的方便编译。但Sam一直没有找到它在交叉编译时该如何正确的起作用。这次就探讨一下。

1. pkg-config基本作用和用法:
1.1: 背景:
很多软件包会被其它程序使用,在此过程中,需要指定头文件位置,库文件,库文件位置等信息。如果单纯手写如下: -I/usr/include/  -lglib -L/usr/lib/ 其一是容易出错,另外,很多包在yum install, apt-get install后头文件和库文件的位置,和使用源码编译,make;make install 的位置也并不一定一致。再加上还有版本问题。所以就有了pkg-config.
pkg-config主要作用是:
  1. 检查库的版本号。如果所需要的库的版本不满足要求,它会打印出错误信息,避免链接错误版本的库文件。
  2. 获得编译预处理参数,如宏定义,头文件的位置。
  3. 获得链接参数,如库及依赖的其它库的位置,文件名及其它一些连接参数。
  4. 自动加入所依赖的其它库的设置。


1.2:使用方法:
先介绍一个特殊文件 *.pc. 它将描述头文件,库文件所在位置,版本号等具体信息。pkg-config就是通过它得到以上信息的。那它具体放在哪里呢,yum install, apt-get install,make install 通常会把这个文件放到/usr/lib/pkgconfig , /usr/local/lib/pkgconfgig, usr/lib64/pkgconfig等位置。但pkg-config如何知道此文件的位置呢? PKG_CONFIG_PATH
例:
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig/
指明pc文件被放到了哪个目录。

具体使用:

Sam机器上的glib-2.0版本为:Version: 2.51.4(pc文件中所描写)
$pkg-config "glib-2.0 > 2.49.1" --cflags
结果是:
-I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include 

$pkg-config "glib-2.0 > 2.49.1" --libs 
结果是:
-L/usr/local/lib -lglib-2.0 

$pkg-config "glib-2.0 > 2.49.1" --libs --cflags
结果是:
-I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -L/usr/local/lib -lglib-2.0 

但如果版本不对呢?
$pkg-config "glib-2.0 > 2.54.1" --libs --cflags
则显示如下:
Requested 'glib-2.0 > 2.54.1' but version of GLib is 2.51.4



2. 交叉编译处理方式1:




 

Viewing all articles
Browse latest Browse all 158

Trending Articles