码迷,mamicode.com
首页 > 其他好文 > 详细

自动查找so依赖

时间:2016-04-11 14:28:02      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:

一、脚本编写

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

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

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

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

技术分享

 

 

 

自动查找so依赖

标签:

原文地址:http://www.cnblogs.com/changyuet/p/5377995.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!