Linux :共享函数库的管理

共享函数库分为静态链接库和动态链接库。静态链接的好处,是程序被搬移到另一个同质系统而不必重新编译,就可顺利运行;缺点是它们的体积比较庞大,需要较多内存。动态链接库的优缺点刚好与静态链接库互补,所浪费内存较少(特别是同时运行多个动态链接的程序且它们共享许多通用函数时),但是如果将文件搬移到另一个系统,却不一定能顺利运行。

共享函数库的依赖关系

动态连接程序通常需要用到一个以上的共享函数库。若所需的函数库不存在或是无法被找到,程序就无法运行。例如,若你打算运行一个专为GNOME图形环境编写的应用程序,但你的系统没有按照必要的GTK函数库,此时就会发生这种不愉快的事情。一般来说,只要按照正确的函数库,就能解决问题。ldd工具可以让你判断执行特定文件所需的函数库。

ldd

语法

ldd programs

说明

列出programs所需的函数库,包括函数库的名称以及所需函数在函数库中的相对位置。

如果用来该命令后,显示的函数库位置中有"not found”字样,那就表示系统找不到所需的函数库。

链接共享函数库

当你运行动态链接的程序时,ld.so会检验该程序文件,找出该出现与共享函数库之间的依赖关系,试着加载能够满足"unresolved linked”的共享函数库。倘若找不到共享函数库,该程序就无法运行。

当ld.so在搜寻函数库时,会优先到/lib/和/usr/lib/这两个目录下查找。若要让ld.so到其他目录下去搜索函数库(例如/usr/local/lib),就必须将新目录的完整路径加到LD_LIBRARY_PATH环境变量中,或是写在/etc/ld.so.conf配置文件中。

每当你修改了配置文件后,都应该执行一次ldconfig,使其产生新的ls.so.cache告诉缓存文件。

ldconfig

语法

ldconfig [options] lib_dirs

说明

依据/etc/ld.so.conf配置文件,以及你给定的lib_dirs重建新的/etc/ld.so.cache高速缓存文件。

常用选项

-p

只查看高速缓存内容,不进行任何修改。

-v

详细列出执行期间的过程与进度。

范例1:

查看ld.so.cache文件的内容:

ldconfig –p | less

范例2:

检查ld.so.cache是否含有特定的函数库:

ldconfig –p | grep sasl

sasl为要查找的函数库。

范例3:

重建ld.so.cache文件:

# echo /usr/local/bin >> /etc/ld.so.conf
# ldconfig

你可能感兴趣的:(Linux :共享函数库的管理)