我们知道,linux编译源码包基本步骤无非是:configure,make,make install三部曲;configure过程中可能会遇到无法找到某些头文件和动态库;原因有两个:
(1)系统压根就没有这些头文件和动态库。(locate XXXX.h/so 未找到)
(2)已经安装相关的头文件和动态库。但未将头文件和动态库拷贝到标准路径下。
对于第(2)中情况,我们可以通过配置PKG_CONFIG_PATH环境变量来解决头文件和动态库无法找到的问题;
先介绍一下pkg-config的用法:
[root@localhost ~]# pkg-config --cflags --libs libcfg
-I/ext/corosync/include -L/ext/corosync/lib -lcfg
上述命令用于返回libcfg.so的链接路径,以及相关的头文件路径。
pkg-config是如何找到libcfg.so的存放路径和头文件的存放路径的呢?pkg-config会查找libcfg.pc文件;该文件存
放了头文件和动态链接库的路径存放信息;libcfg.pc文件内容如下:
prefix=/ext/corosync
exec_prefix=${prefix}
libdir=/ext/corosync/lib
includedir=${prefix}/include
Name: cfg
Version: 1.3.3
Description: cfg
Requires:
Libs: -L${libdir} -lcfg
Cflags: -I${includedir}
那么pkg-config如何找到libcfg.pc文件的呢?相信同学们肯定猜到了,就是PKG_CONFIG_PATH环境变量;一般情况下动态库都存放在安装目录下的lib目录下,libcfg.so存放在/ext/corosync/lib/目录下;同时该目录下有一个pkgconfig目录,相信经常编译源代码的同学对这个目录并不陌生,该目录下存放的就是*.pc文件,存放着我们的动态库和头文件路径元数据。通过设置PKG_CONFIG_PATH为我们/ext/corosync/lib/pkgconfig;pkg-config命令就可以轻松找到*.pc
文件,进而找到路径信息。
好了,经过上述设置后,configure便可以顺利的生成Makefile文件了。make,make install就可以了。
/etc/ld.so.conf中,运行ldconfig更新cache,就大功告成了。
兴趣是最好的导师