下面简单介绍一下ldconfig和ldd在Linux中的用法。我觉得边肖挺好的。我现在就分享给你,给你一个参考。来和边肖一起看看吧。
ldd 查看程序依赖库
ldd
功能:用于检查程序运行所需的共享库,经常用于解决一些由于缺少库文件而导致程序无法运行的问题。
示例:检查运行测试程序的库:
/opt/app/todeav1/test$ldd test
libstdc . so . 6=/usr/lib 64/libstdc . so . 6(0x 00000039 a7e 00000)
libm . so . 6=/lib 64/libm . so . 6(0x 0000003996400000)
lib gcc _ s . so . 1=/lib 64/lib gcc _ s . so . 1(0x 00000039 a 5600000)
libc . so . 6=/lib 64/libc . so . 6(0x 0000003995800000)
/lib 64/LD-Linux-x86-64 . so . 2(0x 0000003995400000)
?第一列:程序需要依赖什么库
?第二列: 系统提供的与程序需要的库所对应的库
?第三列:库加载的开始地址
通过上面的信息,我们可以得到以下几个信息:
1.通过比较第一列和第二列,可以分析出程序需要依赖的库和系统实际提供的库是否匹配。
2.通过观察第三列,我们可以知道当前库中的符号在对应进程的地址空间中的起始位置。
如果找不到依赖库,这个命令可以快速定位问题;
注解
原理: LDD不是可执行程序,只是一个shell脚本;LD展示了可执行模块的依赖关系的工作原理,其本质是通过LD-Linux . so(ELF动态库的loader)来实现的。ld-linux.so模块会在可执行模块程序之前工作,并获得控制权,所以在设置上述环境变量时,ld-linux.so选择显示可执行模块的依赖关系。
-
Ldconfig是一个动态链接库管理命令。为了让系统共享动态链接库,还需要运行动态链接库管理命令LDConfig。ldconfig命令的目的是搜索出可共享的动态链接库(格式如上所述,lib*。so*)中的默认搜索目录(/lib和/usr/lib)和动态库配置文件/etc/ld.so.conf中列出的目录,然后创建动态加载器(ld.so)所需的连接和缓存文件。默认的缓存文件是/。
linux下的共享库机制采用了类似缓存的机制,将库信息存储在/etc/ld.so.cache中。
连接程序时,先在这个文件中查找,然后到ld.so.conf的路径中详细查找。
这就是为什么ld.so.conf被修改为重新运行ldconfig的原因。
补充一下,ldconfig在/sbin。
ldconfig几个需要注意的地方
1.在/lib和/usr/lib中添加一些内容。不一定要修改/etc/ld.so.conf,但是完成之后要调整ldconfig,不然这个库找不到。
2.当你想添加以上两个目录之外的东西时,必须修改/etc/ld.so.conf,然后调用ldconfig,否则找不到。
比如安装了一个mysql到/usr/local/mysql,mysql在/usr/local/mysql /lib下有大量的库。这时就需要在/etc/ld.so.conf下添加一行/usr/local/mysql/lib,保存后在程序运行时就可以找到新的库了。
3.如果你想把lib放在这两个目录之外,但是又不想给/etc/ld.so.conf添加东西(或者你没有权限添加东西)。那也行,就是导出一个全局变量LD_LIBRARY_PATH,然后运行程序的时候会在这个目录下寻找库。一般来说,这只是权宜之计,在没有权限或者临时需要的情况下可以使用。
4.LDConfig做的这些事情都和运行程序有关,和编译无关。编译的时候还是要加-L,不要搞混了。
5.总之,不管对library做了什么改动,最好还是ldconfig一下,否则会出现一些意想不到的结果。不会花太多时间,但是会省很多事。
这篇关于ldconfig和ldd在Linux中的用法的简单介绍是边肖分享的全部内容。希望给大家一个参考,支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。