foolish-wanwan 2024-03-08 17:17 采纳率: 0%
浏览 1

bsp开发场景是什么样的

bsp开发 度更快 平台首页推荐,90%的用户在追加酬金后获得了解决方案 发现还是报错!那么,在执行的时候是如何定位共享库文件的呢?

  1. 当系统加载可执行代码时候,能够知道其所依赖的库的名字,但是还需要知道绝对路径。此时就需要系统动态载入器(dynamic linker/loader)。

  2. 对于elf格式的可执行程序,是由ld-linux.so*来完成的,它先后搜索elf文件的 DT_RPATH段—环境变量LD_LIBRARY_PATH—/etc/ld.so.cache文件列表—/lib/,/usr/lib 目录找到库文件后将其载入内存。

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-08 17:17
    关注

    引自免费微信小程序:皆我百晓生

    在嵌入式BSP(板级支持包)开发场景中,尤其是在基于Linux操作系统的环境中,当系统加载一个可执行程序时,它需要定位并载入所需的共享库文件。针对您的问题,关于动态链接器如何定位和载入共享库的详细流程如下:

    1. 当可执行程序启动时,内核将控制权传递给预设的动态链接器(对于ELF格式的可执行文件通常是ld-linux.so*)。

    2. 动态链接器按照以下顺序查找依赖的共享库(.so文件):

      • DT_RPATH段:首先检查可执行文件自身的DT_RPATH段,这是一个列出搜索路径的区域,用于指定编译链接阶段已知的库路径。

      • 环境变量LD_LIBRARY_PATH:如果DT_RPATH没有找到所需库,链接器会查看环境变量LD_LIBRARY_PATH所指定的一系列目录。

      • /etc/ld.so.cache文件:接下来,链接器会查找预先缓存的库文件列表,这个列表由ldconfig工具生成,包含了系统默认库目录下的所有库文件。

      • 标准库目录:若上述步骤仍未能找到库文件,则链接器会在系统默认的库目录下搜索,这些目录通常包括/lib和/usr/lib。

    3. 当链接器在上述路径之一找到对应的库文件后,将其加载到内存中,并完成符号解析和重定位等过程,使得可执行程序能够正确地使用库中的函数和数据。

    因此,在BSP开发过程中,为了确保程序能够正确加载共享库,开发者需要合理配置上述查找路径,或通过修改可执行文件的RPATH信息来指明特定的库位置。此外,对嵌入式设备而言,由于资源有限,可能还需要特别关注库的版本兼容性和大小优化。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月8日

悬赏问题

  • ¥15 vivo手机锁屏密码忘记了需要手机里的资料在百度里搜可以用ADB命令希望帮帮我
  • ¥15 关于#网络#的问题:网络是从楼上引一根网线下来,接了2台傻瓜交换机,也更换了ip还是不行
  • ¥15 资源泄露软件闪退怎么解决?
  • ¥15 CCF-CSP 2023 第三题 解压缩(50%)
  • ¥30 comfyui openpose报错
  • ¥20 Wpf Datarid单元格闪烁效果的实现
  • ¥15 图像分割、图像边缘提取
  • ¥15 sqlserver执行存储过程报错
  • ¥100 nuxt、uniapp、ruoyi-vue 相关发布问题
  • ¥15 浮窗和全屏应用同时存在,全屏应用输入法无法弹出