Arm开发板上使用ldd命令

ARM开发板上ldd脚本迁移与动态库查找教程
本文指导如何在没有apt-get的ARM开发板上移植和配置ldd命令,解决动态库缺失问题,包括查找对应动态库路径和最终部署步骤。

问题描述

工程需要在用ldd命令查看arm开发板上可执行文件文件需要的动态库缺失情况
但是arm板子上执行ldd命令会提示command not found,另外arm板子也无法使用apt-get命令
而ldd本质上是一个脚本命令,同时ubuntu系统中有ldd命令,所以只要移植过去即可

解决方案

找到ldd命令

cd /usr/bin
find -name ldd

在这里插入图片描述
复制到任意位置,然后开始修改,我这里用的vscode修改的(当然也可以使用vi )

  1. 修改第一行#! /bin/bash#! /bin/sh
  2. 修改RTLDLIST=" " " "中的内容为你开发板对应的内容

查看开发板对应内容方法很简单,首先进入开发板

cd /lib
find -name ld-linux*

在这里插入图片描述
就可以找到这个内容了
因此我需要把RTLDLIST="xxxxxxxx" 修改为RTLDLIST="/lib/ld-linux-armhf.so.3",然后保存退出即可

  1. 将ldd命令拷贝到开发板的 sbin目录下,可使用scp命令

  2. 查看一下有没有移植成功 ldd --version
    在这里插入图片描述

  3. 然后就可以在开发板上使用ldd命令了

### `ldd` 命令提示“不是动态可执行文件”的原因及解决方案 当使用 `ldd` 命令检查某个可执行文件的依赖关系时,若输出提示“not a dynamic executable”,则表示该文件不是一个典型的动态链接可执行文件。这种现象通常出现在静态链接的程序中,也可能是由于文件格式或系统环境问题所致。 #### 静态链接程序的影响 静态链接的可执行文件在编译时已经将所有所需的库代码直接嵌入到二进制文件中,因此不需要运行时加载外部共享库。这类程序不会依赖 `ld-linux.so` 动态链接器来解析库依赖关系,导致 `ldd` 无法识别其依赖项,并显示“not a dynamic executable”信息[^2]。 例如,可以通过以下命令检查一个文件是否为静态链接: ```bash file program_name ``` 如果输出类似于 `ELF 64-bit LSB executable, statically linked`,则表明这是一个静态链接的可执行文件。 #### 文件格式或架构不兼容 某些情况下,`ldd` 报错可能并非由于静态链接,而是因为目标文件本身不是合法的 ELF 可执行文件。例如,它可能是脚本、损坏的二进制文件或与当前系统架构不兼容的可执行文件(如 ARM 架构下的 x86 程序)。 可以使用 `file` 命令进一步确认文件类型及其目标架构: ```bash file /path/to/program ``` 若结果显示非 ELF 格式或与当前 CPU 架构不匹配,则需重新获取适配当前平台的可执行文件。 #### ARM 平台上的 `ldd` 缺失问题 部分嵌入式设备(如 ARM 开发板)可能未预装 `ldd` 工具,这会导致用户误以为程序存在依赖问题。实际上,只要将 Ubuntu 系统中的 `ldd` 脚本移植至 ARM 设备即可解决该问题。此外,由于 ARM 平台通常不支持 `apt-get` 包管理器,因此需要手动复制和配置 `ldd` 脚本以实现依赖分析功能[^1]。 #### 替代方法:使用 `readelf` 检查动态段信息 如果 `ldd` 不可用或无法提供有效信息,可以借助 `readelf` 命令查看可执行文件的 ELF 头部信息,尤其是 `.dynamic` 段是否存在: ```bash readelf -l /path/to/program | grep "INTERP" ``` 若输出包含 `INTERP` 段(即 `/lib/ld-linux.so.*`),则说明该程序是动态链接的;否则可能是静态链接或非标准格式。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值