Android下查看共享库依赖项

[时间:2017-02] [状态:Open]
[关键词:android,共享库依赖项,so,ndk,objdump,readelf]

起因

近期在处理Android下动态库依赖的问题。我知道在Windows下可以使用dependency-walker查看动态库或者可执行文件的依赖性,在linux下可以使用ldd查看动态库的依赖项,比如查看libavcodec.so的输出如下:

$ ldd libavcodec.so
linux-vdso.so.1 = (0x00007ffe89974000)
libswresample.so.2 =not found
libavutil.so.55 =not found
libdl.so.2 =/lib/x86_64-linux-gnu/libdl.so.2 (0x00007f964e331000)
libm.so.6 =/lib/x86_64-linux-gnu/libm.so.6 (0x00007f964e029000)
libz.so.1 =/lib/x86_64-linux-gnu/libz.so.1 (0x00007f964de0e000)
libpthread.so.0 =/lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f964dbef000)
libc.so.6 =/lib/x86_64-linux-gnu/libc.so.6 (0x00007f964d825000)
/lib64/ld-linux-x86-64.so.2 (0x000055b0a681c000)

那么Android下怎么查看呢?

我们都知道Android的内核是基于Linux的,可以从AOSP中你找不到ldd这个可执行程序,ndk中也没有。

这就是本文要解决的问题。
查看Android下共享库的依赖性。

解决方案

方案一:直接移植ldd程序到Android上

同一个基准平台的开源代码,完全可以做到,有兴趣的可以单独找找资料。

方案二:ndk中的readelf

在ndk的toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-readelf中可以找到对应的可执行程序,查看依赖项实用下面命令:

./arm-linux-androideabi-readelf -d libmedia.so

方案三:AOSP中的objdump

在AOSP的prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin中可以看到arm-linux-androideabi-readelfarm-linux-androideabi-objdump都可以使用,其中objdump的命令如下:

./arm-linux-androideabi-objdump -x libmedia.so | grep NEEDED

总结

本文主要是关于如何查看Android下动态库依赖项的方法。

参考资料

  1. Android下怎么使用LDD查看依赖库
  2. Objdump查看依赖so动态库文件

Android下查看共享库依赖项的更多相关文章

  1. windows下查看静态库和动态库的导出函数

    在window下查看动态库的导出函数可以用vs自带的Depends工具: 查看静态库的信息要用命令行来实现: dumpbin   /LINKERMEMBER   Test.lib   >   1 ...

  2. 【转载】Linux下动态共享库加载时的搜索路径详解

    转载自:http://www.eefocus.com/article/09-04/71617s.html 对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loading ...

  3. Linux下动态共享库加载及使用详解【转】

    原文地址:http://blog.chinaunix.net/uid-29025972-id-3855500.html 对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while l ...

  4. Linux下动态共享库加载时的搜索路径详解

    对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loading shared libraries”这样的错误,这是典型的因为需要的动态库不在动态链接器ld.so的搜索路径 ...

  5. Linux下动态共享库加载及使用详解

    转载;http://blog.chinaunix.net/uid-29025972-id-3855500.html 对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loa ...

  6. <摘录>Linux下动态共享库加载时的搜索路径详解

    对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loading shared libraries”这样的错误,这是典型的因为需要的动态库不在动态链接器ld.so的搜索路径 ...

  7. linux下的共享库(动态库)和静态库

    1.什么是库在windows平台和linux平台下都大量存在着库.本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行.由于windows和linux的本质不同,因此二者库的二进制是不 ...

  8. 【转】Android下编译jni库的二种方法(含示例)

    原文网址:http://blog.sina.com.cn/s/blog_3e3fcadd01011384.html 总结如下:两种方法是:1)使用Android源码中的Make系统2)使用NDK(从N ...

  9. 【转】Android下编译jni库的二种方法(含示例) -- 不错

    原文网址:http://blog.sina.com.cn/s/blog_3e3fcadd01011384.html 总结如下:两种方法是:1)使用Android源码中的Make系统2)使用NDK(从N ...

随机推荐

  1. C#并行编程(1):理解并行

    什么是并行 并行是指两个或者多个事件在同一时刻发生. 在程序运行中,并行指多个CPU核心同时执行不同的任务:对于单核心CPU,严格来说是没有程序并行的.并行是为了提高任务执行效率,更快的获取结果. 与 ...

  2. 移动端H5页面返回并且刷新页面(BFcache)

    项目中的需求:点击浏览器中的返回按钮,要让页面重新加载资源.因为这部分的资源每次去加载的内容都不一样,如果返回的时候,还是看到原先的内容,那做这个内容块的意义就很小了:而如果用户看完了这部分内容,再返 ...

  3. Redis实现的分布式锁和分布式限流

    随着现在分布式越来越普遍,分布式锁也十分常用,我的上一篇文章解释了使用zookeeper实现分布式锁(传送门),本次咱们说一下如何用Redis实现分布式锁和分布限流. Redis有个事务锁,就是如下的 ...

  4. 磁盘修复工具TestDisk

    磁盘修复工具TestDisk TestDisk一款免费的数据的恢复工具,可以用于还原丢失的磁盘分区,恢复磁盘驱动引导功能.它还能检测磁盘损坏的原因,如病毒感染.人为损坏.恶意软件等.该工具采用文本菜单 ...

  5. C#中的快捷键,可以更方便的编写代码

    C#中的快捷键,可以更方便的编写代码 CTRL + SHIFT + B 生成解决方案 CTRL + F7 生成编译 CTRL + O 打开文件 CTRL + SHIFT + O 打开项目 CTRL + ...

  6. 51Nod.1244.莫比乌斯函数之和(杜教筛)

    题目链接 map: //杜教筛 #include<map> #include<cstdio> typedef long long LL; const int N=5e6; in ...

  7. 使用time模块,转化时间格式

    import time ''' 时间戳:表示1970年开始计算的偏移量.我们运用type(时间戳)是float类型 结构化时间:9个元素组成的数组 格式化时间字符串 ''' '''获取当前时间戳''' ...

  8. angularJS常用的内置方法

    angular.lowercase(aaa); angular.uppercase(bbb); angular.isString(); angular.isNumber(); angular.isAr ...

  9. 微信企业号开发之weixin://preInjectJSBridge/fail

    最近几天遇到个奇怪的问题,目前只有在Andriod平台上出现:weixin://preInjectJSBridge/fail 不止我一个人遇到这个问题,群里也有好几个问了这个问题.这个问题直接导致我们 ...

  10. 项目出现小红叉,类名上带有 Implicit错误

    Implicit super constructor Object() is undefined for default constructor. Must define an explicit co ...