如何查看linux程序共享库呢?

一、开篇
在linux系统中,程序通常需要依赖于外部库来正常工作。这些库可以直接编译到程序中,也可以从共享库池中加载。使用共享库有助于减小程序大小,简化开发和打包。在linux中,共享库通常存储在/lib或/usr/lib目录下。
不同的linux发行版甚至同一发行版的版本可能使用不同的库,从而导致一个发行版编译的程序在另一个发行版上运行出现故障。当系统中缺少所需库时,这时可能会遇到错误。在嵌入式linux环境中,库文件更是非常关键,因为嵌入式linux中硬件环境往往具有严苛的限制,太多的库将无法完整放入对应的硬件环境下,所以重新组建linux下的运行库在嵌入式linux设计中是重要的一环操作。
要解决共享库加载的问题,我们可以使用一些工具和命令来确定程序所依赖的共享库,本文将讨论实现这一目标的几种方法。
二、ldd命令
ldd命令用于打印出共享对象的依赖。语法如下:
ldd [选项] 文件  
可选的参数如下:
--help              印出这份说明然后离开      --version           印出版本信息然后离开  -d, --data-relocs       进程数据重寻址  -r, --function-relocs   进程数据和函数重寻址  -u, --unused            印出未使用的直接依赖关系  -v, --verbose           印出所有信息  
例如:
使用-v可查看更详细的信息:
注意,使用ldd命令时可能会导致程序运行,因此不要在不受信任的可执行文件上使用ldd。
三、readelf命令
readelf命令是一个强大的命令,用于显示elf文件的信息,可使用该命令查看共享库的依赖,方法如下:
readelf --dynamic ./app | grep needed  
例如下列命令用于查看/usr/bin/dir的依赖库:
四、objdump命令
objdump命令在开发中也是一个较为常用的命令,且功能强大,用于显示对象文件中的信息,可以使用该命令来查看共享库的依赖,方法如下:
objdump -p /path/to/program | grep needed  
例如下列命令用于查看/usr/bin/dir的依赖库:
五、pldd命令
六、/proc//maps
通过检查/proc//maps来获知运行进程的库需求:
awk '/.so/{print $6}'  /proc/$(pgrep bash | head -n1)/maps | sort -u  
例如:
上述语句中pgrep bash | head -n1表示获取第一个名为bash的进程的id。
七、使用pmap收集程序的共享库需求
pmap $(pgrep xorg | head -n1) | grep .so | awk '{ print $4 }' | sort -u  
上述语句中pgrep bash | head -n1表示获取第一个名为bash的进程的id。
八、使用lsof工具检查正在运行的进程的共享库需求
使用方法:
lsof -p $(pgrep bash | head -n1) | grep mem  
上述语句中pgrep bash | head -n1表示获取第一个名为bash的进程的id。
九、总结
在发行版的linux系统中,上述命令几乎都可以使用来查看动态库的依赖关系,在嵌入式linux系统中,可能由于网络环境的限制、运行架构的不同、构建的文件系统中不存在对应的命令程序,从而导致上述一些命令无法运行或者找不到运行的命令,这时候常使用readelf和objdump查看动态库的依赖关系,因为在交叉编译构建工具链中一般会包含readelf和objdump命令的变体。


水喷射引导的激光技术
伺服电机抖动原因及处理
鱼虾食品安全快速检测系统的操作原理介绍
Andes晶心科技和Parasoft合力为汽车功能安全应用提供无缝的软件测试工具
日韩贸易制裁加剧 中国或获新机遇
如何查看linux程序共享库呢?
无晶振无线MCU器件CC2652RB的小体积无线应用
飞兆半导体:走向高效能和低功耗
华为P10高清渲染图来袭,要不要美得那么夸张
贸泽电子携手Analog Devices推出全新电子书 帮助工程师解决激光雷达设计挑战
中国联通提出了“智慧冬奥”的核心目标
LM35温度传感器应用及特性
Flyme进化史,魅蓝X/Flyme6发布在即,能结合出怎样的火花?
厄瓜多尔智能手机出货量小米位居榜首
你看见过自动驾驶拍照吗
分析旁路电容器的三个主要应用领域
贴片陶瓷电容的特性参数都有哪些
索尼Xperia XZ1最新消息,索尼Xperia XZ1跑分公布,为什么同样是835,这款手机会如此厉害?
外资看好2019 年半导体产业:第一季触底,低潮期将比预期短得多
争做中国封装测试第一品牌,华天科技召开变革项目启动会