Android下查看共享库依赖项

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动态库文件
posted @ 2017-03-01 15:02  Tocy  阅读(2552)  评论(0编辑  收藏  举报