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-readelf
和arm-linux-androideabi-objdump
都可以使用,其中objdump的命令如下:
./arm-linux-androideabi-objdump -x libmedia.so | grep NEEDED
总结
本文主要是关于如何查看Android下动态库依赖项的方法。
参考资料
----------------------------------------------------------------------------------------------------------------------------
本文作者:Tocy e-mail: zyvj@qq.com
版权所有@2015-2020,请勿用于商业用途,转载请注明原文地址。本人保留所有权利。