Linux命令:ldd
1、ldd不是一个可执行程序,而是一个shell脚本。
zlf@ubuntu:~/$ which ldd
/usr/bin/ldd
zlf@ubuntu:~/$ file /usr/bin/ldd
/usr/bin/ldd: Bourne-Again shell script, ASCII text executable
2、ldd能够显示可执行模块的dependency,其原理是通过设置一系列的环境变量,如:LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_LIBRARY_VERSION、 LD_VERBOSE等。当LD_TRACE_LOADED_OBJECTS环境变量不为空时,任何可执行程序在运行时,它都会只显示模块的 dependency,而程序并不真正执行。比如:
export LD_TRACE_LOADED_OBJECTS
无效。
而
zlf@ubuntu:~/$ export LD_TRACE_LOADED_OBJECTS=
或
zlf@ubuntu:~/$ export LD_TRACE_LOADED_OBJECTS=
或
zlf@ubuntu:~/$ export LD_TRACE_LOADED_OBJECTS=
均可使其生效,运行ls命令显示如下:
zlf@ubuntu:~/$ ls
linux-gate.so. => (0xb77b2000)
libselinux.so. => /lib/i386-linux-gnu/libselinux.so. (0xb777a000)
librt.so. => /lib/i386-linux-gnu/librt.so. (0xb7771000)
libacl.so. => /lib/i386-linux-gnu/libacl.so. (0xb7767000)
libc.so. => /lib/i386-linux-gnu/libc.so. (0xb75bd000)
libdl.so. => /lib/i386-linux-gnu/libdl.so. (0xb75b8000)
/lib/ld-linux.so. (0xb77b3000)
libpthread.so. => /lib/i386-linux-gnu/libpthread.so. (0xb759d000)
libattr.so. => /lib/i386-linux-gnu/libattr.so. (0xb7597000)
撤销环境变量:
zlf@ubuntu:~/$ unset LD_TRACE_LOADED_OBJECTS
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)。
Linux命令:ldd的更多相关文章
- Linux命令——ldd和ldconfig
转自:Linux系统中“动态库”和“静态库”那点事儿 前言 在调试lua脚本的时候,报错. 我已经再lua脚本中更改了cpath package.cpath = package.cpath .. &q ...
- 1· linux命令:查看依赖的共享库 - ldd命令
今天使用qt链接mysql的时候,发现提示driver not load 而出现此错误一般是没有mysql驱动的原因,但是qt5.4已经提供了mysql驱动的 查看plugins/sqldrivers ...
- 我常用的那些linux命令
我常用的那些linux命令 用linux也有些年头了,说来也忏愧,说是有些年头了,其实也还是个不长进的主.记得第一次接触linux是boss跟我说的怎么操作,什么编辑模式,按i,a,o进入编辑模式.在 ...
- 最全的linux命令大全,shell运维手册
shell实例手册 0 说明{ 手册制作: 雪松} 1 文件{ ls -rtl # 按时间倒叙列出所有目录和文件 ll -rt touch file ...
- LINUX命令总结 -------来自 水滴娃娃 的CSDN
LINUX命令总结 标签: LINUX命令总结 2014-01-27 15:54 41039人阅读 评论(1) 收藏 举报 分类: linux(1) 版权声明:本文为博主原创文章,未经博主允许不得 ...
- [Android ] linux命令英文缩写的含义(方便记忆)
du -sh */ reference to : http://blog.chinaunix.net/uid-27164517-id-3299073.html linux常用命令的英文单词缩写 命令缩 ...
- linux 命令总结(转载)
linux 命令总结(转载) 1. 永久更改ip ifconfig eth0 新ip 然后编辑/etc/sysconfig/network-scripts/ifcfg-eth0,修改ip 2.从Lin ...
- linux命令英文缩写的含义(方便记忆)
命令缩写: ls:list(列出目录内容) cd:Change Directory(改变目录) su:switch user 切换用户 rpm:redhat package manager 红帽子打包 ...
- linux 命令中英文对照,收集
linux 命令中英文对照,收集 linux 命令英文全文 Is Linux CLI case-sensitive? The answer is, yes. If you try to run L ...
- LInux命令英文全称
Linux命令英文全称 su = Swith user 切换用户,切换到root用户cat = Concatenate 串联uname = Unix name 系统名称df = Disk free ...
随机推荐
- 【从0到1学算法】大O表示法
一般我们在选择算法时,都是想要选择效率最高的算法.那算法的效率,用什么表示?没错!就是用大O表示法. PS: 大O表示法中,log即为log2,后面不再说明. 下面以简单查找和二分查找,在含有n个元素 ...
- .NET CORE 获取微信支付回调
1.获取微信支付的回调的数据 Stream stream = HttpContext.Request.Body; byte[] buffer = new byte[HttpContext.Reques ...
- winform显示、隐藏任务栏及开始菜单
private const int SW_HIDE = 0; //隐藏 private const int SW_RESTORE = 9;//显示 /// <summary> /// 获取 ...
- UVA 11584 入门DP
一开始把它当成暴力来做了,即,从终点开始,枚举其最长的回文串,一旦是最长的,马上就ans++,再计算另外的部分...结果WA了 事实证明就是一个简单DP,算出两个两个点组成的线段是否为回文,再用LCS ...
- Bug(1)
程序要求:内网之间客户端截屏(.bmp)并传送给服务端. server: #include <winsock2.h> // 为了使用Winsock API函数 #include <s ...
- Python不区别字符串大小写的列表比较法
一开始想这样写,结果报了索引错误 后来改正: if user_name.lower() in [names.lower() for names in names]: 我觉得应该是in后面应该跟列表,而 ...
- linux 解压命令总结
常用Linux 命令: [转自]https://www.jianshu.com/p/ca41f32420d6 解压缩 .tar 解包:tar xvf FileName.tar 打包:tar cvf F ...
- jsp动作标签学习
<jsp:useBean> <jsp:useBean>标签用于在指定的域范围内查找指定名称的JavaBean对象,如果存在则直接返回该JavaBean对象的引用,如果不存在则实 ...
- 01 语言基础+高级:1-6 集合_day02【Collection、泛型】
day02[Collection.泛型] 主要内容 Collection集合 迭代器 增强for 泛型 教学目标 能够说出集合与数组的区别 说出Collection集合的常用功能 能够使用迭代器对集合 ...
- windows服务器搭建SVN[多项目设置方法]
https://tortoisesvn.net/downloads.html 根据系统版本进行下载,下载后正常一路正常安装. 第一.设置版本号仓库目录,比如:cdengine 第二.在cdengine ...