查看可执行文件中依赖的动态库:

$ readelf -d /bin/sh
Dynamic section at offset 0x1ca88 contains 27 entries:标记        类型                         名称/值0x0000000000000001 (NEEDED)             共享库:[libc.so.6]0x000000000000000c (INIT)               0x45e80x000000000000000d (FINI)               0x15ad40x0000000000000019 (INIT_ARRAY)         0x21bda80x000000000000001b (INIT_ARRAYSZ)       8 (bytes)0x000000000000001a (FINI_ARRAY)         0x21bdb00x000000000000001c (FINI_ARRAYSZ)       8 (bytes)0x000000006ffffef5 (GNU_HASH)           0x2980x0000000000000005 (STRTAB)             0x17880x0000000000000006 (SYMTAB)             0x5580x000000000000000a (STRSZ)              1815 (bytes)0x000000000000000b (SYMENT)             24 (bytes)0x0000000000000015 (DEBUG)              0x00x0000000000000003 (PLTGOT)             0x21cc780x0000000000000002 (PLTRELSZ)           2328 (bytes)0x0000000000000014 (PLTREL)             RELA0x0000000000000017 (JMPREL)             0x3cd00x0000000000000007 (RELA)               0x20980x0000000000000008 (RELASZ)             7224 (bytes)0x0000000000000009 (RELAENT)            24 (bytes)0x0000000000000018 (BIND_NOW)           0x000000006ffffffb (FLAGS_1)            标志: NOW0x000000006ffffffe (VERNEED)            0x20280x000000006fffffff (VERNEEDNUM)         10x000000006ffffff0 (VERSYM)             0x1ea00x000000006ffffff9 (RELACOUNT)          2710x0000000000000000 (NULL)               0x0

这里能看到sh这个程序依赖的共享库是libc.so.6,那么在运行时如何找到该共享库呢?
实际上更加详细的信息可以使用ldd命令查看:

$ ldd /bin/sh
linux-vdso.so.1 =>  (0x00007fff5a5fe000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1407c31000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1408235000)

这里发现除了上面指定的之外,还有对应的ld-linux-x86-64.so.2,这个库文件就是为了查找动态库的,那么它又是如何被找到的呢?
实际上ld-linux动态库是在可执行文件的固定位置,路径也是由gcc在编译时就已经确定好了的。那么后续其他动态库查找都是由此动态库完成的。

ld-linux查找动态库的顺序:

1.可执行文件编译时由-L指定的动态库路径查找
2.从LD_LIBRARY_PATH环境变量指定的路径查找
3.从ldconfig的配置文件指定的路径查找:/etc/ld.so.conf(或/usr/local/etc/ld.so.conf)
4.从默认路径查找:/usr/lib和/lib

为arm64平台上适配ldd命令

1.修改ldd脚本第一行#!/bin/bash改为busybox对应的路径如#!/bin/sh
2.修改RTLDLIST="/lib64/ld-linux-x86-64.so.2"为对应的目录RTLDLIST="/lib/ld-linux-aarch64.so.1"
3.把脚本放到目标板的/bin目录

Linux程序动态库的加载相关推荐

  1. linux动态库ldd加载顺序,ldd查看动态依赖库

    ldd命令用于输出程序或者库文件所依赖的共享库列表. 语法 ldd (选项) (参数) 选项 --help:显示帮助信息 --version:打印指令版本号: -v:详细信息模式,打印所有相关信息: ...

  2. 某些error page不加载_细说So动态库的加载流程

    本文为看雪论坛优秀文章 看雪论坛作者ID:sossai dlopen之内存装载dlopen用来打开一个动态链接库,并将其装入内存.它的定义在Android源码中的路径为/bionic/linker/d ...

  3. java-native方法,通过JNI实现c的动态库的加载,实现软硬件之间的交互,跨平台的基础之一

    java跨平台是java一个具有十分优势的语言特性,为什么能跨平台?我想除了java的jvm本身在语言设计时,采用了字节码这样一种能运行在虚拟机上的指令占了50的功劳,还有50%来自基于C的对不同平台 ...

  4. 把共享库(SO)加载到指定的内存地址

    一位朋友最近遇到一个棘手的问题,希望把共享库(SO)加载到指定的内存地址,目的可能是想通过prelink来加快应用程序的起动速度.他问我有没有什么方法.我知道Windows下是可以的,比如在VC6里设 ...

  5. Linux下动态库(.so)和静态库(.a)

     linux下有两种库:动态库和静态库(共享库) 二者的不同点在于代码被载入的时刻不同. 静态库的代码在编译过程中已经被载入可执行程序,因此体积比较大. 动态库(共享库)的代码在可执行程序运行时才 ...

  6. 【Linux】动态库与静态库

    动态库与静态库 文件系统补完 文件的三个时间acm 动态库与静态库 动态链接与静态链接 静态库与动态库 动静态库的对比 生成静态库 打包静态库 使用静态库 生成动态库 打包动态库 使用动态库 文件系统 ...

  7. linux程序卸载动态库,Intel平台下linux中ELF文件动态链接的加载、解析及实例分析(二): 函数解析与卸载...

    在 IBM Bluemix 云平台上开发并部署您的下一个应用. 相信读者已经看过了 Intel平台下Linux中ELF文件动态链接的加载.解析及实例分析(一): 加载的内容了,了解了ELF文件被加载的 ...

  8. 微信小程序 - 高级 - 深度实践 - wx:for-item 与 data-xxx 的联合应用 实现后台动态数据自动加载的正确方法概述

    前言:之前的静态加载中我们看到wx:for-item除了命名外,似乎不能发挥作用,其实在动态网页数据加载的时候非常有用的. 1 问题提出 一个富含数据访问的应用,例如大量的后台表格的更新,你做静态的展 ...

  9. linux查看动态库导出的符号,Linux下控制动态库导出

    在Linux中动态库的确给程序带来了良好的扩充性,并减少了内存的使用量,但这是有代价的.例如: #include Int main(int argc, char *argv[]) { Printf(& ...

最新文章

  1. mysql安装图形化管理界面phpMyAdmin
  2. 关于线程池,那些你还不知道的事
  3. when is this.oModel in sap-ui-core.js initialized for navigation working case
  4. dedecms如何调用当前栏目的子栏目及子栏目文章
  5. sharepoint 2013基于AD的Form表单登录(三)——选择用户时,屏蔽掉AD。
  6. 计算机关机后耗电问题,不用拔电线 轻松设置解决电脑关机耗电
  7. 【声学基础】概述——辐射
  8. 数组任意取三个数中乘积最大值
  9. winform datagridview 自定义tooltip
  10. C#中对txt文件的读写操作
  11. 杭电2098--分拆素数和
  12. 自定义形状下载连接 ps资源
  13. pytorch实现反向传播
  14. word插入漂亮的代码块
  15. PR——轨道遮罩-玻璃滑动效果
  16. python将一个word文档中内容全部复制,添加到另一个word文档末
  17. Nuke对图片添加Alpha通道
  18. 2021-03-23
  19. OpenCV--直线拟合fitLine及求两直线对称轴
  20. [推荐收藏]MAC地址完美攻略(教你如何防止IP被盗用及绑定IP)

热门文章

  1. 教你百度网盘文件转阿里云
  2. css基本语法选择器
  3. 二等水准测量记录数据_二等水准测量外业数据整理(往返测).doc
  4. 关于杂项(bugku平台)(持续更新)
  5. maya多边形建模怎样做曲面_maya多边形建模教程_maya建模教程
  6. linux下的lib文件
  7. 设计模式之设配器模式、外观模式
  8. Git实用技巧36招
  9. Excel — 动态图表(复选框实现动态图)
  10. SD SDHC SDXC