Linux环境下配置动态链接库

来源:互联网 发布:查看80端口占用 编辑:程序博客网 时间:2024/06/05 10:18

有时候在Linux系统下安装软件后,尤其当软件不是安装在默认路径下时,软件运行可能会出现找不到库文件的错误,查看软件依赖库,方法如下:

[root@test soapsnp-v2.0]# ldd  soapsnp

libz.so.1 => ***  (0x00002afe959740000)

libncurses.so.5 => ...

如果依赖的库文件不存在的话,会提示not found,这时就需要对库文件进行一定的配置。

 

首先介绍下Linux下常用的目录结构:

/bin:       存放着一百多个Linux下常用的命令、工具

/dev:      存放着Linux下所有的设备文件

/home:  用户主目录,每建一个用户,就会在这里新建一个与用户同名的目录,给该用户一个自己的空间

/mnt:      外部设备的挂接点,通常用cdrom与floppy两个子目录,它的存在简化了光盘与软盘的使用

/proc:    这其实是一个假的目录,通过这里你可以访问到内存里的内容,内核提供的一个接口,主要用来存储系统统计信息

/lib:        静态链接库

/etc:       存放Linux大部分的配置文件

/usr:      通常用来安装各种软件的地方,/usr/include、/usr/lib及/usr/share 则是存放一些共享链接库

 

下面重点说下/etc/ld.so.conf:

这个文件记录了编译时使用的动态链接库的路径。默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件。所以当安装程序的库文件不是安装在这两个目录下面时,就需要在ld.so.conf文件中配置一下搜索的路径,例如:你所需要的库文件放在/usr/local/lib下,添加该路径到ld.so.conf中:

[root@test etc]# cat /etc/ld.so.conf

include ld.so.conf.d/*.conf

/usr/local/lib

另一种配置方法,在文件夹/etc/ld.so.conf.d中新添加一个配置文件*.conf,将依赖库文件写到该配置文件中去也行,因为在ld.so.conf中已经包含了ld.so.conf.d中的所有配置文件了。

 

在配置完成之后,运行一下ldconfig。

ldconfig的作用就是将/etc/ld.so.conf列出的路径下的库文件缓存到/etc/ld.so.cache 以供使用。

 

再说说PKG_CONFIG_PATH变量:

有时安装程序后使用时会提示版本低,安装高版本的程序后仍然提示的是低版本,这时就需要设置PKG_CONFIG_PATH变量了。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下就可以了。设定好后可以加入到~/.bashrc中,例如:
PKG_CONFIG_PATH=/opt/kde-3.3.0/lib/pkgconfig:/usr/lib/pkgconfig:/usr/local/pkgconfig:/usr/X11R6/lib/pkgconfig

 

设置PKG_CONFIG_PATH变量的问题我自己还没碰到过,先记录在这里,以后碰到就不用再找了,呵呵。

原创粉丝点击