(转)/ld.so.conf ; ldconfig ; PKG_CONFIG_PATH详解

转载 2011年01月19日 09:09:00

http://linux.chinaunix.net/techdoc/system/2009/11/24/1145874.shtml

首先说下/etc/ld.so.conf:
这个文件记录了编译时使用的动态链接库的路径。
默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件
如果你安装了某些库,比如在安装gtk+-2.4.13时他会需要glib-2.0 >=
2.4.0,辛苦的安装好glib后
没有指定 --prefix=/usr
这样glib库就装到了/usr/local下,而又没有在/etc/ld.so.conf中添加/usr/local/lib这个搜索路径,所以编译gtk+-2.4.13就会出错了
对于这种情况有两种方法解决:
一:在编译glib-2.4.x时,指定安装到/usr下,这样库文件就会放在/usr/lib中,gtk就不会未找到需要的库文件了
对于安装库文件来说,这是个好办法,这样也不用设置PKG_CONFIG_PATH了
二:将/usr/local/lib加入到/etc/ld.so.conf中,这样安装gtk时就会去搜索/usr/local/lib,同样能找到需要的库
将/usr/local/lib加入到/etc/ld.so.conf也是必须的,这样以后安装东东到local下,就不会出现这样的问题了。
将自己可能存放库文件的路径都加入到/etc/ld.so.conf中是明智的选择
添加方法也极其简单,将库文件的绝对路径直接写进去就OK了,一行一个。例如:
/usr/X11R6/lib
/usr/local/lib
/opt/lib
再来看看ldconfig :
他是个程式,通常他位于/sbin下,是root用户使用的。具体作用及用法能man
ldconfig查到
简单的说,他的作用就是将/etc/ld.so.conf列出的路径下的库文件
缓存到/etc/ld.so.cache 以供使用
因此当安装完一些库文件,(例如刚安装好glib),或修改ld.so.conf增加新的库路径后,需要运行一下/sbin/ldconfig
使所有的库文件都被缓存到ld.so.cache中,如果没做,即使库文件明明就在/usr/lib下的,也是不会被使用的,结果编译过程中报错,缺少xxx库
我原来编译KDE时就犯过这个错误,(他需要每编译好一个东东,都要运行一遍),所以切记改动库文件后一定要运行一下ldconfig,在所有目录下运行都能。
再来说说 PKG_CONFIG_PATH这个变量吧:
经常在论坛上看到有人问"为什么我已安装了glib-2.4.x,不过编译gtk+-2.4.x
还是提示glib版本太低阿?
为什么我安装了glib-2.4.x,还是提示未找到阿?。。。。。。"都是这个变量搞的鬼。
先说说他是哪冒出来的,当安装了pkgconfig-x.x.x这个包后,就多出了pkg-config,他就是需要PKG_CONFIG_PATH的东东
pkgconfig-x.x.x又是做什么的? 来看一段说明:
The pkgconfig package contains tools for passing the include path
and/or library paths to build tools during the make file
execution.
pkg-config is a function that returns meta information for the
specified library.
The default setting for PKG_CONFIG_PATH is /usr/lib/pkgconfig
because of the prefix we use to install pkgconfig. You may add to
PKG_CONFIG_PATH by exporting additional paths on your system where
pkgconfig files are installed. Note that PKG_CONFIG_PATH is only
needed when compiling packages, not during run-time.
其实pkg-config就是向configure程式提供系统信息的程式,比如软件的版本啦,库的版本啦,库的路径啦,等等
这些信息只是在编译其间使用。你能 ls /usr/lib/pkgconfig
下,会看到许多的*.pc,用文本编辑器打开
会发现类似下面的信息:
prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
glib_genmarshal=glib-genmarshal
gobject_query=gobject-query
glib_mkenums=glib-mkenums
Name: GLib
Description: C Utility Library
Version: 2.4.7
Libs: -L${libdir} -lglib-2.0
Cflags: -I${includedir}/glib-2.0 -I${libdir}/glib-2.0/include
明白了吧,configure就是靠这些信息判断你的软件版本是否符合需求。并且得到这些东东所在的位置,要不去哪里找呀。
不用我说你也知道为什么会出现上面那些问题了吧。
解决的办法非常简单,设定正确的PKG_CONFIG_PATH,如果将glib-2.x.x装到了/usr/local/下,那么glib-2.0.pc就会在
/usr/local/lib/pkgconfig下,将这个路径添加到PKG_CONFIG_PATH下就能啦。并且确保configure找到的是正确的
glib-2.0.pc,就是将其他的lib/pkgconfig目录glib-2.0.pc干掉就是啦。(如果有的话
^-^)
设定好后能加入到~/.bashrc中,例如:
PKG_CONFIG_PATH=/opt/kde-3.3.0/lib/pkgconfig:/usr/lib/pkgconfig:/usr/local/pkgconfig:
/usr/X11R6/lib/pkgconfig
[root@NEWLFS ~]#echo $PKG_CONFIG_PATH
/opt/kde-3.3.0/lib/pkgconfig:/usr/lib/pkgconfig:/usr/local/pkgconfig:/usr/X11R6/lib/pkgconfig
从上面能看出,安装库文件时,指定安装到/usr,是非常有好处的,无论是/etc/ld.so.conf还是PKG_CONFIG_PATH
默认都会去搜索/usr/lib的,能省下许多麻烦,不过从源码包管理上来说,都装在/usr下
管理是个问题,不如装在/usr/local下方便管理
其实只要设置好ld.so.conf,PKG_CONFIG_PATH路径后,就OK啦

相关文章推荐

/etc/ld.so.conf & ldconfig & PKG_CONFIG_PATH[转]

/etc/ld.so.conf & ldconfig & PKG_CONFIG_PATH[转]

(转)/etc/ld.so.conf和ldconfig, PKG_CONFIG_PATH

http://dev.firnow.com/course/6_system/linux/Linuxjs/200874/130190.html 首先说下/etc/ld.so.conf: 这个文件记录了编...

linux源码安装之/ld.so.conf ; ldconfig ;configure;pkg-config PKG_CONFIG_PATH详解

首先说下/etc/ld.so.conf: 这个文件记录了编译时使用的动态链接库的路径。 默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件 如果你安装了某些库,比如在安装g...

Linux源代码编译软件及PKG_CONFIG_PATH、LD_LIBRARY_PATH、/etc/ld.so.conf、ldconfig

Linux源码编译过程如下图所示:

[源码包编译]关于/etc/ld.so.conf、ldconfig、pkg-config、PKG_CONFIG_PATH的一篇文章

转自:http://hi.baidu.com/%B6%FE%C3%AB/blog/item/94ac9152b28ef20c0df3e36e.html 同时参考另外一篇文章:《Linux动态链接库搜...

关系到能否成功编译 /etc /ld.so.conf ; ldconfig ; PKG_CONFIG

原文链接 首先说下/etc/ld.so.conf: 这个文件记录了编译时使用的动态链接库的路径。 默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件 ...

ld.so.conf 文件与PKG_CONFIG_PATH变量

From http://hi.baidu.com/dexinmeng/blog/item/5512cf018b8941d5277fb571.html   一、编译和连接 一般来说,如果库的头...

ld.so.conf 文件与PKG_CONFIG_PATH变量

网络转载,自己留着当个记录,忘了就看一眼。一、编译和连接        一般来说,如果库的头文件不在 /usr/include 目录中,那么在编译的时候需要用 -I 参数指定其路径。由于同一个库在不同...

PKG_CONFIG_PATH变量 与 ld.so.conf 文件

文章来自:http://hi.baidu.com/dexinmeng/blog/item/5512cf018b8941d5277fb571.html一、编译和连接        一般来说,如果库的头文...

ld.so.conf 文件与PKG_CONFIG_PATH变量

ld.so.conf 文件与PKG_CONFIG_PATH变量  转自:http://www.linuxsir.org/bbs/thread344786.html 一、编译和连接 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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