linux命令--ldconfig和ldd用法

一、ldconfig

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一下,不然会出现一些意想不到的结果。不会花太多的时间,但是会省很多的事。

二、ldd

作用:用来查看程序运行所需的共享库,常用来解决程序因缺少某个库文件而不能运行的一些问题。
ldd命令原理(摘自网络)
1、首先ldd不是一个可执行程序,而只是一个shell脚本
2、ldd能够显示可执行模块的dependency,其原理是通过设置一系列的环境变量,如下:LD_TRACE_LOADED_OBJECTS、
LD_WARN、LD_BIND_NOW、LD_LIBRARY_VERSION、LD_VERBOSE等。当
LD_TRACE_LOADED_OBJECTS环境变量不为空时,任何可执行程序在运行时,它都会只显示模块的dependency,而程序并不真正执行。要不你可以在shell终端测试一下,如下:
(1) export LD_TRACE_LOADED_OBJECTS=1
(2) 再执行任何的程序,如ls等,看看程序的运行结果
3、ldd显示可执行模块的dependency的工作原理,其实质是通过ld-linux.so(elf动态库的装载器)来实现的。我们知道,ld-
linux.so模块会先于executable模块程序工作,并获得控制权,因此当上述的那些环境变量被设置时,ld-linux.so选择了显示可执
行模块的dependency。
4、实际上可以直接执行ld-linux.so模块,如:/lib/ld-linux.so.2 --list program(这相当于ldd program)

时间: 2024-09-20 00:16:03

linux命令--ldconfig和ldd用法的相关文章

浅谈Linux中ldconfig和ldd的用法_Linux

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 => /

在 Linux 命令行中使用和执行 PHP 代码(二):12 个 PHP 交互性 shell 的用法

在上一篇文章"在 Linux 命令行中使用和执行 PHP 代码(一)"中,我同时着重讨论了直接在Linux命令行中运行PHP代码以及在Linux终端中执行PHP脚本文件. Run PHP Codes in Linux Commandline 本文旨在让你了解一些相当不错的Linux终端中的PHP交互性 shell 的用法特性. 让我们先在PHP 的交互shell中来对php.ini设置进行一些配置吧. 6. 设置PHP命令行提示符 要设置PHP命令行提示,你需要在Linux终端中使用下

如何在Linux命令行下收听网络电台

如何在Linux命令行下收听网络电台 对于花大量时间在Linux屏幕前的系统管理员和Linux爱好者来说,网络/本地电台上的音乐可以极大提高生产力,你们知道吗?不管你们相信与否,,在工作环境中有适当的声音,如音乐或者闲聊声包围,都可以提高我们的创造力.如果你喜欢在音乐环境中工作,这个教程也许会对你有用.我将会向你展示如何在命令行中收听潘多拉(Pandora)在线电台(LCTT译注:Pandora Internet Radio是一个仅为美国.澳大利亚和新西兰提供自动音乐推荐的系统.详细介绍Pran

每个开发人员都应该知道的8个常用Linux命令

每个开发人员到了他们职业人生的某个阶段的时候,将会发现自己要寻找有关Linux的信息.我并不是这方面的专家.但是掌握了以下8个命令,我几乎可以得到我任何需要的东西. 注意:以下的命令都有很多扩展的文档,博客里提出的知识我最常用的命令,用法.如果你不了解Linux命令,这个帖子会给你一点指导. 我们以一些文本举例.假设我们有2个文件,里面有订单关于第三方的放置地点和发送回应. order.out.log 8:22:19 111, 1, Patterns of Enterprise Architec

自学Linux命令的四种方法

  如果你想成为Linux高手,那么掌握一些Linux命令是必不可少的.下面是自学Linux命令的四种方法. 每日提示 学习Linux命令的一种渐进式方法是:在每次打开终端时,让它显示"每日提示".这会向你介绍一些有用的命令及其高级使用技巧. 在.bashrc中(/home/.bashrc)增加如下一行: echo "Did you know that:"; whatis $(ls /bin | shuf -n 1) 你只需要增加这行就够了!如果你想让它更娱乐化一些

转摘--如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等

http://www.vaikan.com/use-multiple-cpu-cores-with-your-linux-commands/ 你是否曾经有过要计算一个非常大的数据(几百GB)的需求?或在里面搜索,或其它操作--一些无法并行的操作.数据专家们,我是在对你们说.你可能有一个4核或更多核的CPU,但我们合适的工具,例如 grep, bzip2, wc, awk, sed等等,都是单线程的,只能使用一个CPU内核. 借用卡通人物Cartman的话,"如何我能使用这些内核"? 要

Java服务化系统线上应急和技术攻关,你必须掌握的Linux命令

上一篇文章<Java服务化系统线上应急和技术攻关,你必须拥有的那些应用层脚本和Java虚拟机命令>介绍了笔者在互联网公司里线上应急和技术攻关过程中积累的应用层脚本和Java虚拟机命令,这些脚本和命令在发现问题和定位问题的过程中起到关键作用,然而,经常会遇到一些深层次的问题,仅仅通过应用层和JVM虚拟机层的信息无法定位问题和解决问题,这时需要深入研究系统级的各种参数和信息,才能确定问题的根源原因,例如:网络超时.机器负载过高.JVM OOM.JVM和内核Bug等,这篇文章介绍那些重要的Linux

linux命令中分页等管道符的使用

linux使用命令查看很多东西的时候,一般都会选择使用管道符,要么为了过滤,要么为了分页显示,总之这些管道符有着很重要的作用. 管道 管道简单理解就是,使用管道意味着第一个命令的输出会作为第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推.利用Linux所提供的管道符"|"将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入. grep命令 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全

每个程序员都应该知道的8个Linux命令

摘要:Linux里有很丰富的各种命令,有些是很难用的.然而,学会了前面说的这8个命令,你已经能处理大量的log分析任务了,完全不需要用脚本语言写程序来处理它们. 每个程序员,在职业生涯的某个时刻,总会发现自己需要知道一些Linux方面的知识.我并不是说你应该成为一个Linux专家,我的意思是,当面对Linux命令行任务时,你应该能很熟练的完成.事实上,学会了下面8个命令,我基本上能完成任何需要完成的任务. 注意:下面的每个命令都有十分丰富的文档说明.这篇文章并不是来详尽的展示每个命令的各种功用的