将ldd命令移植到32位Arm开发板

将ldd命令移植到Arm开发板

今天开发过程中要查看arm开发板上一个可执行文件的依赖库,调用ldd命令,发现板子上没有,就想移植一个过来,在网上查阅了资料发现ldd不是一个二进制可执行文件,而是一个shell脚本文件,注意依赖 ld-linux.*.so 这个动态库工作。移植方法也很简单,主要是三步:

  1. 将ldd文件的首行解释器的定义改一下,“#! /bin/bash”改为“#! /bin/sh”。
  2. 找到“RTLDLIST=***********”,这一行将里面的库文件名改为开发板上相应的库文件名。
    在开发板运行查找命令:
find / -name ld-linux*

我的开发板里的文件名是:ld-linux.so.3,故此行改为:RTLDLIST=“/lib/ld-linux.so.3”。

  1. 下载到开发板的sbin目录中,运行。

发现运行查看版本都没问题,就是查看依赖库时报错:“ldd not a dynamic executable”。
百思不得其解,琢磨了半天,突然想到,这个ldd脚本是我从64位Diebian测试云服务器拷贝下来的,而Arm开发板是32位的,是不是这个原因?又上网搜索找了个32位Ubuntu的ldd脚本,改过之后,下载,测试,一切OK。这里记录一下过程,防止下次用到。
更改后的ldd脚本如下:

#! /bin/sh
# Copyright (C) 1996-2016 Free Software Foundation, Inc.
# This file is part of the GNU C Library.# The GNU C Library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.# The GNU C Library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.# You should have received a copy of the GNU Lesser General Public
# License along with the GNU C Library; if not, see
# <http://www.gnu.org/licenses/>.# This is the `ldd' command, which lists what shared libraries are
# used by given dynamically-linked executables.  It works by invoking the
# run-time dynamic linker as a command and setting the environment
# variable LD_TRACE_LOADED_OBJECTS to a non-empty value.# We should be able to find the translation right at the beginning.
TEXTDOMAIN=libc
TEXTDOMAINDIR=/usr/share/localeRTLDLIST="/lib/ld-linux.so.3"
warn=
bind_now=
verbose=while test $# -gt 0; docase "$1" in--vers | --versi | --versio | --version)echo 'ldd (Ubuntu GLIBC 2.23-0ubuntu10) 2.23'printf $"Copyright (C) %s Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
" "2016"printf $"Written by %s and %s.
" "Roland McGrath" "Ulrich Drepper"exit 0;;--h | --he | --hel | --help)echo $"Usage: ldd [OPTION]... FILE...--help              print this help and exit--version           print version information and exit-d, --data-relocs       process data relocations-r, --function-relocs   process data and function relocations-u, --unused            print unused direct dependencies-v, --verbose           print all information
"printf $"For bug reporting instructions, please see:\\n%s.\\n" \"<https://bugs.launchpad.net/ubuntu/+source/glibc/+bugs>"exit 0;;-d | --d | --da | --dat | --data | --data- | --data-r | --data-re | \--data-rel | --data-relo | --data-reloc | --data-relocs)warn=yesshift;;-r | --f | --fu | --fun | --func | --funct | --functi | --functio | \--function | --function- | --function-r | --function-re | --function-rel | \--function-relo | --function-reloc | --function-relocs)warn=yesbind_now=yesshift;;-v | --verb | --verbo | --verbos | --verbose)verbose=yesshift;;-u | --u | --un | --unu | --unus | --unuse | --unused)unused=yesshift;;--v | --ve | --ver)echo >&2 $"ldd: option \`$1' is ambiguous"exit 1;;--)		# Stop option processing.shift; break;;-*)echo >&2 'ldd:' $"unrecognized option" "\`$1'"echo >&2 $"Try \`ldd --help' for more information."exit 1;;*)break;;esac
donenonelf ()
{# Maybe extra code for non-ELF binaries.return 1;
}add_env="LD_TRACE_LOADED_OBJECTS=1 LD_WARN=$warn LD_BIND_NOW=$bind_now"
add_env="$add_env LD_LIBRARY_VERSION=\$verify_out"
add_env="$add_env LD_VERBOSE=$verbose"
if test "$unused" = yes; thenadd_env="$add_env LD_DEBUG=\"$LD_DEBUG${LD_DEBUG:+,}unused\""
fi# The following command substitution is needed to make ldd work in SELinux
# environments where the RTLD might not have permission to write to the
# terminal.  The extra "x" character prevents the shell from trimming trailing
# newlines from command substitution results.  This function is defined as a
# subshell compound list (using "(...)") to prevent parameter assignments from
# affecting the calling shell execution environment.
try_trace() (output=$(eval $add_env '"$@"' 2>&1; rc=$?; printf 'x'; exit $rc)rc=$?printf '%s' "${output%x}"return $rc
)case $# in
0)echo >&2 'ldd:' $"missing file arguments"echo >&2 $"Try \`ldd --help' for more information."exit 1;;
1)single_file=t;;
*)single_file=f;;
esacresult=0
for file do# We don't list the file name when there is only one.test $single_file = t || echo "${file}:"case $file in*/*) :;;*) file=./$file;;esacif test ! -e "$file"; thenecho "ldd: ${file}:" $"No such file or directory" >&2result=1elif test ! -f "$file"; thenecho "ldd: ${file}:" $"not regular file" >&2result=1elif test -r "$file"; thenRTLD=ret=1for rtld in ${RTLDLIST}; doif test -x $rtld; thendummy=`$rtld 2>&1` if test $? = 127; thenverify_out=`${rtld} --verify "$file"`ret=$?case $ret in[02]) RTLD=${rtld}; break;;esacfifidonecase $ret in0|2)try_trace "$RTLD" "$file" || result=1;;1)# This can be a non-ELF binary or no binary at all.nonelf "$file" || {echo $"	not a dynamic executable"result=1};;*)echo 'ldd:' ${RTLD} $"exited with unknown exit code" "($ret)" >&2exit 1;;esacelseecho 'ldd:' $"error: you do not have read permission for" "\`$file'" >&2result=1fi
doneexit $result
# Local Variables:
#  mode:ksh
# End:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/867843.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云云效流水线打包完流程

实现流程 新建流水线 配置代码地址 Node.js 构建 主机部署 1. 新建流水线 1.1 打开云效&#xff0c;找到流水线 立即新建&#xff1a; 选择模版或者创建空流水线 2.配置代码地址 选择代码源&#xff0c;阿里云的话就选择codeup即可 服务连接&#xff0c;主要是你自己的云效服…

【TB作品】51单片机 Proteus仿真 00002仿真-智能台灯色调倒计时光强

实验报告&#xff1a;基于51单片机的智能台灯控制系统 背景 本实验旨在设计一个基于51单片机的智能台灯控制系统&#xff0c;该系统可以通过按键进行手动控制&#xff0c;并能根据环境光强度自动调节台灯亮度。此外&#xff0c;系统还具备倒计时关灯功能。 器件连接 51单片…

软件运维服务方案(Word原件2024)

软件运维服务方案&#xff08;Word原件&#xff09; 1. 服务简述 我们提供全面的软件运维服务&#xff0c;确保软件系统的稳定运行。 1.1 服务内容 包括监控、维护、故障排查与优化。 1.2 服务方式 结合远程与现场服务&#xff0c;灵活响应客户需求。 1.3 服务要求 高效响应&am…

双向DFS——AcWing 171. 送礼物

双向DFS 定义 双向深度优先搜索&#xff08;Bi-directional Depth First Search, BD-DFS&#xff09;是一种在图或树中寻找两点间路径的算法。与传统的单向DFS不同&#xff0c;BD-DFS同时从起始节点和目标节点出发进行搜索&#xff0c;使用两个DFS过程。一个向前探索从起点到…

从一个(模型设计的)想法到完成模型验证的步骤

从有一个大型语言模型&#xff08;LLM&#xff09;设计的想法到完成该想法的验证&#xff0c;可以遵循以下实践步骤&#xff1a; 需求分析&#xff1a; 明确模型的目的和应用场景。确定所需的语言类型、模型大小和性能要求。分析目标用户群体和使用环境。 文献调研&#xff1a…

【C++】类型擦除 + 工厂模式,告别 if-else

文章目录 一、使用std::variant和std::visit二、使用虚函数三、使用工厂模式管理第三方库的Msg四、尾随逗号1.初始化列表2.枚举3.数组4.结构体或类的成员初始化列表 参考 需求点&#xff1a;假设一个第三方库有提供了很多Msg类&#xff0c;这些Msg类都提供了固定的一个成员函数…

swiftui中常用组件picker的使用,以及它的可选样式

一个可选项列表就是一个picker组件搞出来的&#xff0c;它有多个样式可以选择&#xff0c;并且可以传递进去一些可选数据&#xff0c;有点像前端页面里面的seleted组件&#xff0c;但是picker组件的样式可以更多。可以看官方英文文档&#xff1a;PickerStyle | Apple Developer…

【对接支付宝支付详细流程】

下面示例使用的是支付宝的网页支付&#xff0c;最终的效果如图&#xff1a; 1.前置条件 对接支付宝你需要了解的知识点 1.加密算法 对称加密和非对称加密&#xff0c;RSA2加密算法&#xff0c;签名验证 2.支付宝平台openid unionId的概念 https://opendocs.alipay.com/pre…

文件管理下:文件函数的学习

前言 Hello,小伙伴们你们的作者君又来了&#xff0c;上次我们简单介绍了文件的坐拥并简单提到了数据的读取&#xff0c;和C语言的默认流的作用&#xff0c;今天我将继续带领大家探索文件的奥秘&#xff0c;大家准别好了吗&#xff1f; 在内容开始之前还是按照惯例&#xff0c…

初识java—jdk17的一些新增特性

文章目录 前言一 &#xff1a; yield关键字二 &#xff1a;var关键字三 &#xff1a;密封类四 &#xff1a;空指针异常&#xff1a;五&#xff1a;接口中的私有方法&#xff1a;六&#xff1a;instanceof关键字 前言 这里介绍jdk17相对于jdk1.8的部分新增特性。 一 &#xff…

QT使用QGraphicsView绘图 重写QGraphicsObject类实现点在QPainterPath路径上移动动画效果

闲谈&#xff1a;眨眼间&#xff0c;2024年就过去了一半了&#xff0c;年前定下的计划一个都没完成&#xff0c;乘着有空&#xff0c;把之前学习的内容和示例先总结了。 目录 导读SVG 转QPainterPath 路径获取QPainterPath指定长度时的坐标。重写QGraphicsObject类 实现点图元Q…

stm32精密控制步进电机(基础篇)

众所周知&#xff0c;步进电机由于使用脉冲控制&#xff0c;会比直流电机的控制稍难一些&#xff0c;但开环控制时也更加稳定。 落到做项目的时候&#xff0c;目前来说我都会先考虑步进电机&#xff0c;再去考虑直流&#xff0c;无刷这样的电机。包括毕设时所用的机械臂也是用…

并发处理 优先图和多重图

优先图(Precedence Graph)视图可串性多重图(Polygraph) 优先图(Precedence Graph) 优先图用于冲突可串性的判断。 优先图结构&#xff1a; 结点 (Node)&#xff1a;事务&#xff1b;有向边 (Arc): Ti → Tj &#xff0c;满足 Ti <s Tj&#xff1b; 存在Ti中的操作A1和Tj…

开源全新H5充值系统源码/自定义首页+充值页面/灵活对接上游渠道接口

开源全新H5充值系统源码&#xff0c;系统基于thinkphp框架开发&#xff0c;功能已全完善&#xff0c;可灵活对接其他上游渠道接口&#xff0c;默认对接了大猿人接口&#xff0c;另外可无限制自定义创建充值页面&#xff0c;首页支持后台自定义修改&#xff0c;支持三级分销&…

史上最全的自抗扰控制(ADRC)学习资料

史上最全的自抗扰控制&#xff08;ADRC&#xff09;学习资料 需要的私信我~ 需要的私信我~ 需要的私信我~ ​ 本文将作者近些年来学习ADRC算法的学习资料进行汇总&#xff0c;整理了这一版相对较全的学习资料&#xff0c;包含参考文献以及仿真案例&#xff0c;适合初学者入门&…

6、Redis系统-数据结构-05-整数

五、整数集合&#xff08;Intset&#xff09; 整数集合是 Redis 中 Set 对象的底层实现之一。当一个 Set 对象只包含整数值元素&#xff0c;并且元素数量不大时&#xff0c;就会使用整数集合这个数据结构作为底层实现。整数集合通过紧凑的内存布局和升级机制&#xff0c;实现了…

ECharts 饼图:数据可视化的重要工具

ECharts 饼图&#xff1a;数据可视化的重要工具 引言 在数据分析和可视化的领域&#xff0c;ECharts 是一个广受欢迎的开源库。它由百度团队开发&#xff0c;用于在网页中创建交互式图表。ECharts 提供了多种图表类型&#xff0c;包括柱状图、折线图、散点图等&#xff0c;而…

【学习笔记】Redis学习笔记——第7章 压缩列表

第7章 压缩列表 ZipList&#xff1a;只包含少量小整数与短字符串。 7.1 压缩列表的构成 1>zlbytes&#xff1a;记录整个压缩列表占用内存字节数 2>zltail&#xff1a;尾结点距起始地址多少个字节数 3>zllen&#xff1a;节点数&#xff0c;若节点数超出两个字节所能…

HiAI Foundation开发平台,加速端侧AI应用的智能革命

如果您是一名开发者&#xff0c;正在寻找一种高效、灵活且易于使用的端侧AI开发框架&#xff0c;那么HarmonyOS SDKHiAI Foundation服务&#xff08;HiAI Foundation Kit&#xff09;就是您的理想选择。 作为一款AI开发框架&#xff0c;HiAI Foundation不仅提供强大的NPU计算能…

C语言编程1:变量、常量与输入输出详解

C语言1&#x1f525;&#xff1a; 变量&#xff0c;赋值与初始化&#xff0c;常量&#xff0c;输入与输出 一、变量&#x1f33f; ✨1.1 定义 在C语言中变量是一个用来保存数据的地方。当我们需要在程序里保存数据时就需要用到变量。 ✨1.2 变量名称 变量名称是需要我们自…