自动查找so依赖

一、脚本编写

适配系统的时候,需要查找一些依赖文件,手工用winhex或UltraEdit来找挺麻烦的。

所以写了个shell脚本,用来批量取得这些依赖关系。

在linux系统下,把如下内容存为getNEED.sh

[plain] view plain copy print?

  1. #/bin/bash
  2. #by changyuet
  3. printf "**************************************\n"
  4. printf "please put this shell to system folder\n"
  5. printf "**************************************\n"
  6. function getNeed()
  7. {
  8. echo ‘<<<<<<getting NEED for ‘$1‘>>>>>>‘
  9. case $1 in
  10. lib/hw)
  11. name=lib_hw
  12. ;;
  13. vendor/bin)
  14. name=vendor_bin
  15. ;;
  16. vendor/lib)
  17. name=vendor_lib
  18. ;;
  19. vendor/lib/hw)
  20. name=vendor_lib_hw
  21. ;;
  22. *)
  23. name=$1
  24. ;;
  25. esac
  26. if [ ! -d $1 ];then
  27. printf "can‘t find $1 folder!\n"
  28. else
  29. ls $1 -p | grep [^/]$ > info_$name.txt
  30. cat info_$name.txt |while read line
  31. do
  32. echo "getting NEED for" $line
  33. echo $line >> Need_$name.txt
  34. objdump -x $1/$line | grep "NEEDED" >> Need_$name.txt
  35. echo "*************************************" >> Need_$name.txt
  36. done
  37. rm info_$name.txt
  38. fi
  39. }
  40. getNeed bin;
  41. getNeed lib;
  42. getNeed lib/hw;
  43. getNeed vendor/bin;
  44. getNeed vendor/lib;
  45. getNeed vendor/lib/hw;
  46. printf "**********Completed!**********\n"
 

二、使用说明

以下操作均在linux下完成(在linux的ext3或ext4文件系统下操作),首先确保你的linux有objdump这个程序

把ROM解压,再把getNEED.sh复制到system目录

打开shell并定位到system目录。

#先给权限

chmod a+x getNEED.sh

再执行

./getNEED.sh

执行完毕后,目录下生成的NEED_xxx.txt就是批量列出的依赖关系文件

如果文件不含NEEDED,则代表此文件无依赖关系,或者不能被objdump识别

如何解读(例):

adb   NEEDED               libc.so   NEEDED               libstdc++.so   NEEDED               libm.so

*************************************

此段含义:

adb这个程序,需要libc.so、libstdc++.so、libm.so这三个文件

========================================================================================

附加知识:

有时候缺lib,并不提示文件名,而是提示一串比如:_ZN3net15

这个时候可以通过这个命令来查找

grep -r "_ZN3net15" *

时间: 2024-08-29 00:44:46

自动查找so依赖的相关文章

Android Studio 错误: 非法字符: &#39;\ufeff&#39; 及 Gradle不能自动查找xml自定义属性

一.非法字符: '\ufeff' 在将项目导入到Studio时提示 错误:非法字符: '\ufeff',编译器没报错但编译出错,比较头疼,后来发现原因是因为没有采用UTF-8无BOM模式,用 Notepad++ 或其他编辑器将文件打开,更换下格式就可以解决: 注:Eclipse可以智能的把有BOM文件转为无BOM文件,目前Andorid Studio未做处理.下面也简单的说下什么是BOM(Byte-Order Mark),可以理解为字节顺序标记,是位于码点U+FEFF的统一码字符的名称.当以 U

Maven管理SSM框架的pom.xml文件配置(自动下载所依赖的jar包)

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion&

关于eclipse添加自动查找文件以及svn的插件

1.添加自动查找当前文件位置的插件(如下图) 在百度搜索下载 OpenExplorer_1.5.0.v201108051313.jar,下载之后放入eclipse下面的plugin文件夹下面既可以 2.svn插件 同样的在网上下载好svn插件文件,进行解压,  然后就eclipse文件夹下dropins里面关于svn的插件全部删除  然后将下载后的插件包解压放入文件,重启eclipse即可, 当然可能会遇到错误,由于文件夹多一级的原因,此处参考 如下 http://blog.csdn.net/t

Android Studio 查找aar依赖的顺序

Android Studio 查找aar依赖的顺序: Searched in the following locations: file:/E:/android_studio/sdk/extras/m2repository//netframe-debug//netframe-debug-.pom file:/E:/android_studio/sdk/extras/m2repository//netframe-debug//netframe-debug-.aar file:/E:/android

Qt打包部署程序自动查找依赖DLL工具windeployqt

qt编译好一个exe程序之后,部署到一台没有开发环境的机器上,需要一起拷贝其依赖的dll文件.这时需要一个windeployqt工具来帮忙,因为手动拷贝的话容易遗漏. https://blog.csdn.net/graceland525/article/details/52167944 上面的链接可以参考 cmd进入编译好的exe目录,假设D:/ABC/abc.exe windeployqt abc.exe即可 原文地址:https://www.cnblogs.com/coolbear/p/10

ideal环境maven自动下载项目依赖配置

开篇序言 最近在使用ideal软件对springboot进行开发研究,中间遇到的环境和创建springboot遇到的问题真是玲琅满目,但是遇到问题就要克服这是万年不变的真理. 该文档会后续不断的补充,准备做成一个系列,以ideal环境熟悉.spring boot及搭建ssm和ssh. spring cloud为主. PS:ideal果然是开发的好帮手,提示很到位的. 今天先开篇为主: spring boot的好处: 以往在用ssh,ssm开发项目时要配置大量的文件.信息才能跑通一个项目,但是若只

Spring基于的注解自动装配和依赖注入(***)

#自动装配的小Demo: package com.gyf.annotation; public interface UserDao { public void save(); } package com.gyf.annotation; import org.springframework.stereotype.Repository; @Repository("userDao") public class UserDaoImpl implements UserDao { @Overrid

如何用Qt自动拷贝exe依赖的dll

QT生成的.exe文件不能运行的解决办法 之前的数独项目的GUI,当我的Qt项目生成exe时,由于缺少了相关的依赖dll文件,打开会一直报缺少依赖文件的错: 然后一开始我到安装的Qt文件夹里把这些有Qt生产的exe依赖的dll一个个拷贝了之后,还是会报缺依赖,后来发现有个qwindows.dll得放到新建的目录platforms下,反正甚是麻烦.而且我自认为加全依赖后,本地能跑,到别人机器又是各种报错,很烦恼. 实际上用QT自带的windeployqt.exe工具运行需要处理的exe即可,命令如

通过递归查找应用依赖

Python递归网上的例子很多大多是数学计算,我在工作遇到一个问题也需要递归来解决但是稍有不同,我们生产环境使用Dubbo分布式服务,Dubbo monitor可以显示应用的调用关系,但是现实情况是随着时间推移应用增多功能增多就会发生循环调用的情况,比如应用A的生产者是由应用A的消费者调用,这就是自己调用自己,还有的是隔了几级由调用回来了.看下图 现在的要求就是给定一个应用找出它直接和间接依赖的所有应用,相同的保留一个(这个相同指的是,A依赖B,B依赖E,E也依赖E,如果指定A,则返回B和E)