标签:
一、脚本编写
适配系统的时候,需要查找一些依赖文件,手工用winhex或UltraEdit来找挺麻烦的。
所以写了个shell脚本,用来批量取得这些依赖关系。
在linux系统下,把如下内容存为getNEED.sh
- #/bin/bash
- #by changyuet
- printf "**************************************\n"
- printf "please put this shell to system folder\n"
- printf "**************************************\n"
-
- function getNeed()
- {
- echo ‘<<<<<<getting NEED for ‘$1‘>>>>>>‘
- case $1 in
- lib/hw)
- name=lib_hw
- ;;
- vendor/bin)
- name=vendor_bin
- ;;
- vendor/lib)
- name=vendor_lib
- ;;
- vendor/lib/hw)
- name=vendor_lib_hw
- ;;
- *)
- name=$1
- ;;
- esac
-
- if [ ! -d $1 ];then
- printf "can‘t find $1 folder!\n"
- else
- ls $1 -p | grep [^/]$ > info_$name.txt
- cat info_$name.txt |while read line
- do
- echo "getting NEED for" $line
- echo $line >> Need_$name.txt
- objdump -x $1/$line | grep "NEEDED" >> Need_$name.txt
- echo "*************************************" >> Need_$name.txt
- done
- rm info_$name.txt
- fi
- }
-
- getNeed bin;
- getNeed lib;
- getNeed lib/hw;
- getNeed vendor/bin;
- getNeed vendor/lib;
- getNeed vendor/lib/hw;
- 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