浅谈Linux中ldconfig和ldd的用法

作者:jingxian 时间:2021-07-01 14:57:37 

ldd 查看程序依赖库

ldd

作用:用来查看程式运行所需的共享库,常用来解决程式因缺少某个库文件而不能运行的一些问题。

示例:查看test程序运行所依赖的库:

/opt/app/todeav1/test$ldd test
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000039a7e00000)
libm.so.6 => /lib64/libm.so.6 (0x0000003996400000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00000039a5600000)
libc.so.6 => /lib64/libc.so.6 (0x0000003995800000)
/lib64/ld-linux-x86-64.so.2 (0x0000003995400000)

•第一列:程序需要依赖什么库

•第二列: 系统提供的与程序需要的库所对应的库

•第三列:库加载的开始地址

通过上面的信息,我们可以得到以下几个信息:

1.通过对比第一列和第二列,我们可以分析程序需要依赖的库和系统实际提供的,是否相匹配

2.通过观察第三列,我们可以知道在当前的库中的符号在对应的进程的地址空间中的开始位置

如果依赖的某个库找不到,通过这个命令可以迅速定位问题所在;

注解

原理: ldd不是个可执行程式,而只是个shell脚本; ldd显示可执行模块的dependency的工作原理,其实质是通过ld-linux.so(elf动态库的装载器)来实现的。ld-linux.so模块会先于executable模块程式工作,并获得控制权,因此当上述的那些环境变量被设置时,ld-linux.so选择了显示可执行模块的dependency。

--------------------------------------------------------------

ldconfig是一个动态链接库管理命令,为了让动态链接库为系统所共享,还需运行动态链接库的管理命令–ldconfig。 ldconfig 命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态 链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为 /etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表.

linux下的共享库机制采用了类似于高速缓存的机制,将库信息保存在/etc/ld.so.cache里边。

程序连接的时候首先从这个文件里边查找,然后再到ld.so.conf的路径里边去详细找。

这就是为什么修改了ld.so.conf要重新运行一下ldconfig的原因

补充一点,ldconfig在/sbin里面。

ldconfig几个需要注意的地方

1. 往/lib和/usr/lib里面加东西,是不用修改/etc/ld.so.conf的,但是完了之后要调一下ldconfig,不然这个library会找不到

2. 想往上面两个目录以外加东西的时候,一定要修改/etc/ld.so.conf,然后再调用ldconfig,不然也会找不到

比如安装了一个mysql到/usr/local/mysql,mysql有一大堆library在/usr/local/mysql /lib下面,这时 就需要在/etc/ld.so.conf下面加一行/usr/local/mysql/lib,保存过后ldconfig一下,新的library才能在 程序运行时被找到。

3. 如果想在这两个目录以外放lib,但是又不想在/etc/ld.so.conf中加东西(或者是没有权限加东西)。那也可以,就是export一个全局变 量LD_LIBRARY_PATH,然后运行程序的时候就会去这个目录中找library。一般来讲这只是一种临时的解决方案,在没有权限或临时需要的时 候使用。

4. ldconfig做的这些东西都与运行程序时有关,跟编译时一点关系都没有。编译的时候还是该加-L就得加,不要混淆了。

5. 总之,就是不管做了什么关于library的变动后,最好都ldconfig一下,不然会出现一些意想不到的结果。不会花太多的时间,但是会省很多的事。

标签:linux,ldconfig,ldd
0
投稿

猜你喜欢

  • 谈谈我用过的单用户博客(Blog)程序

    2008-07-21 13:01:00
  • CMD下加sql账号:黑客入侵新手法

    2009-09-20 19:45:00
  • 网站防木马 IIS虚拟主机权限设置及安全配置

    2007-12-25 22:14:00
  • 在VMware下快速克隆多个Linux环境的方法教程

    2022-11-12 15:20:06
  • VMware15.5版本安装Windows_Server_2008_R2系统教程图解

    2023-10-29 04:49:14
  • VSFTPD的菜鸟篇

    2009-12-23 19:25:00
  • 什么是web 2.0 (4)

    2007-12-21 10:18:00
  • 使用Docker部署SpringBoot项目的实现方法

    2022-12-05 02:44:35
  • 在Fedora上建立自己的邮件服务器(2)

    2007-09-07 14:02:00
  • 基于Unix的Web服务器安全指南

    2009-09-10 12:52:00
  • GoDaddy:如何使用mod rewrite

    2010-04-22 12:53:00
  • 浅谈SEO,91now做站月余心得

    2007-08-05 18:23:00
  • 从头开始:网站标题在SEO优化中的重要性

    2009-03-18 14:15:00
  • adsense西联取款时GG公司电话的填写方法

    2008-06-30 14:12:00
  • 发现站长统计的一个小漏洞

    2008-05-21 21:31:00
  • 如何成为名博

    2008-12-23 13:26:00
  • Docker overlay 网络搭建的方法

    2021-07-21 12:24:16
  • 少有人知的好插件介绍

    2010-09-19 18:00:00
  • 做网站优化的SEOER们 请保持好您的心态

    2009-08-23 10:47:00
  • 浅谈网站如何才能得以有效推广

    2010-03-07 14:58:00
  • asp之家 网站运营 m.aspxhome.com