pkg-config使用
2014-08-15 16:42
253 查看
我们在用第三方库的时候,经常会用到pkg-config这个东西来编译程序。
pkg-config是干什么用的?简单的说就是向用户向程序提供相应库的路径、版本号等信息的程序。
典型的是用作库的编译和连接。如在Makefile中:program: program.c cc program.c `pkg-config --cflags --libs gnomeui` |
pkg-config 查看gcc的CFLAGS参数
$pkg-config --libs --cflags opencv
会显示如下信息:
-I/usr/local/include/opencv -L/usr/local/lib -lcxcore -lcv -lhighgui -lcvaux -lml
各位看官,你看这不就是我们用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这个环境变量所指定的路径下去找。
设置环境变量PKG_CONFIG_PATH方法举例如下:
export PKG_CONFIG_PATH=/cv/lib:$PKG_CONFIG_PATH
================================================================
查看一个.pc文件的内容:
root@tfy:/usr/local/lib/pkgconfig# cat opencv.pc
# Package Information for pkg-config
prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include/opencv
Name: OpenCV
Description: Intel(R) Open Source Computer Vision Library
Version: 2.0.0
Libs: -L${libdir} -lcxcore -lcv -lhighgui -lcvaux -lml
Cflags: -I${includedir}
[root@yx pkgconfig]# pwd
/usr/lib/pkgconfig
可见.pc文件 是对其的库文件路径,头文件路径,版本号,Cflags等一些参数进行封装。
如何进行编译程序:
例 DispalyImage.cpp
root@tfy:/home/tfy/code/opencv/test# cat DisplayImage.cpp
#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv )
{
if ( argc != 2 )
{
printf("usage: DisplayImage.out <Image_Path>\n");
return -1;
}
Mat image;
image = imread( argv[1], 1 );
if ( !image.data )
{
printf("No image data \n");
return -1;
}
namedWindow("Display Image", CV_WINDOW_AUTOSIZE );
imshow("Display Image", image);
waitKey(0);
return 0;
}
g++ -ggdb `pkg-config --cflags opencv` `pkg-config --libs opencv` -o
DisplayImage DisplayImage.cpp
其中,--cflags参数提取出编译所需的选项,--libs参数提取出连接时的选项,可以分为两步:
$g++ -c DisplayImage.cpp`pkg-config --cflags opencv` $g++ -o DisplayImage DisplayImage.o`pkg-config --libs opencv` |
相关文章推荐
- linux里命令pkg-config工具的使用
- 转贴:linux里命令pkg-config工具的使用-zhuang
- linux里命令pkg-config工具的使用
- pkg-config的使用
- pkg-config的使用
- linux里命令pkg-config工具的使用[zt]
- linux里命令pkg-config工具的使用
- linux里命令pkg-config工具的使用
- pkg-config的使用
- pkg-config的使用
- linux使用pkg-config写简单的Makefile
- linux里命令pkg-config工具的使用
- pkg-config的使用
- linux里命令pkg-config工具的使用
- pkg-config使用
- Linux configure关于交叉编译的参数设置 (转)+补充一下关于 pkg-config 在交叉编译中的使用(转) + 动态.so库的环境设置, 使用 ld.so.conf(转)
- linux里命令pkg-config工具的使用
- 关于pkg-config的使用示例
- linux里命令pkg-config工具的使用
- pkg-config的使用