[转]Android下怎么使用LDD查看依赖库

Android下没有ldd可以使用,在进行ndk开发的时候,检查库的依赖项特别麻烦。有两个解决方案:

1、将linux的的ldd移植过去。因为android也是基于linux的,所以将ldd移植过去是完全可能的,google一下吧,这不是本文的重点;

2、现成的。ndk已经提供了工具,在ubuntu下执行locate readelf,你会发现有这些输出:

/mydroid/external/elfutils/src/readelf.c

/mydroid/prebuilt/darwin-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-readelf

/mydroid/prebuilt/darwin-x86/toolchain/arm-eabi-4.2.1/man/man1/arm-eabi-readelf.1

/mydroid/prebuilt/darwin-x86/toolchain/arm-eabi-4.3.1/bin/arm-eabi-readelf

/mydroid/prebuilt/darwin-x86/toolchain/arm-eabi-4.3.1/man/man1/arm-eabi-readelf.1

/mydroid/prebuilt/darwin-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-readelf

/mydroid/prebuilt/darwin-x86/toolchain/arm-eabi-4.4.0/man/man1/arm-eabi-readelf.1

/mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-readelf

/mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/man/man1/arm-eabi-readelf.1

/mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.3.1/bin/arm-eabi-readelf

/mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.3.1/man/man1/arm-eabi-readelf.1

/mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-readelf

/mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/man/man1/arm-eabi-readelf.1

/mydroid/prebuilt/linux-x86/toolchain/i686-unknown-linux-gnu-4.2.1/bin/i686-unknown-linux-gnu-readelf

/mydroid/prebuilt/linux-x86/toolchain/i686-unknown-linux-gnu-4.2.1/man/man1/i686-unknown-linux-gnu-readelf.1

/mydroid/prebuilt/linux-x86/toolchain/sh-4.3.3/bin/sh-linux-gnu-readelf

/usr/android/android-ndk-r4b/build/prebuilt/linux-x86/arm-eabi-4.2.1/bin/arm-eabi-readelf

/usr/android/android-ndk-r4b/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin/arm-eabi-readelf

/usr/bin/readelf

/usr/share/man/man1/readelf.1.gz

加粗的部分就是你可以使用的工具了。

测试一下:

当你完成android的编译后,测试如下:

[email protected]:/mydroid/out/target/product/generic/system/bin# /usr/android/android-ndk-r4b/build/prebuilt/linux-x86/arm-eabi-4.2.1/bin/arm-eabi-readelf -d test_pvauthorengine

Dynamic section at offset 0x20b00 contains 26 entries:

Tag        Type                         Name/Value

0x00000001 (NEEDED)                     Shared library: [libopencore_author.so]

0x00000001 (NEEDED)                     Shared library: [libopencore_common.so]

0x00000001 (NEEDED)                     Shared library: [libdl.so]

0x00000001 (NEEDED)                     Shared library: [libc.so]

0x00000001 (NEEDED)                     Shared library: [libstdc++.so]

0x00000001 (NEEDED)                     Shared library: [libm.so]

0x00000020 (PREINIT_ARRAY)              0x28000

0x00000021 (PREINIT_ARRAYSZ)            0x8

0x00000019 (INIT_ARRAY)                 0x28008

0x0000001b (INIT_ARRAYSZ)               8 (bytes)

0x0000001a (FINI_ARRAY)                 0x28010

0x0000001c (FINI_ARRAYSZ)               8 (bytes)

0x00000004 (HASH)                       0x8108

0x00000005 (STRTAB)                     0x8fb0

0x00000006 (SYMTAB)                     0x85a0

0x0000000a (STRSZ)                      4570 (bytes)

0x0000000b (SYMENT)                     16 (bytes)

0x00000015 (DEBUG)                      0x0

0x00000003 (PLTGOT)                     0x28bf8

0x00000002 (PLTRELSZ)                   1144 (bytes)

0x00000014 (PLTREL)                     REL

0x00000017 (JMPREL)                     0xa19c

0x00000011 (REL)                        0xa18c

0x00000012 (RELSZ)                      16 (bytes)

0x00000013 (RELENT)                     8 (bytes)

0x00000000 (NULL)                       0x0

[email protected]:/mydroid/out/target/product/generic/obj/lib# /usr/android/android-ndk-r4b/build/prebuilt/linux-x86/arm-eabi-4.2.1/bin/arm-eabi-readelf -d libopencore_common.so

Dynamic section at offset 0xcc448 contains 36 entries:

Tag        Type                         Name/Value

0x00000001 (NEEDED)                     Shared library: [libutils.so]

0x00000001 (NEEDED)                     Shared library: [libcutils.so]

0x00000001 (NEEDED)                     Shared library: [libui.so]

0x00000001 (NEEDED)                     Shared library: [libhardware.so]

0x00000001 (NEEDED)                     Shared library: [libandroid_runtime.so]

0x00000001 (NEEDED)                     Shared library: [libdrm1.so]

0x00000001 (NEEDED)                     Shared library: [libmedia.so]

0x00000001 (NEEDED)                     Shared library: [libskia.so]

0x00000001 (NEEDED)                     Shared library: [libvorbisidec.so]

0x00000001 (NEEDED)                     Shared library: [libsonivox.so]

0x00000001 (NEEDED)                     Shared library: [liblog.so]

0x00000001 (NEEDED)                     Shared library: [libicuuc.so]

0x00000001 (NEEDED)                     Shared library: [libcamera_client.so]

0x00000001 (NEEDED)                     Shared library: [libsurfaceflinger_client.so]

0x00000001 (NEEDED)                     Shared library: [libdl.so]

0x00000001 (NEEDED)                     Shared library: [libc.so]

0x00000001 (NEEDED)                     Shared library: [libstdc++.so]

0x00000001 (NEEDED)                     Shared library: [libm.so]

0x0000000e (SONAME)                     Library soname: [libopencore_common.so]

0x00000010 (SYMBOLIC)                   0x0

0x00000019 (INIT_ARRAY)                 0xc7000

0x0000001b (INIT_ARRAYSZ)               16 (bytes)

0x00000004 (HASH)                       0xb4

0x00000005 (STRTAB)                     0xc6fc

0x00000006 (SYMTAB)                     0x420c

0x0000000a (STRSZ)                      86133 (bytes)

0x0000000b (SYMENT)                     16 (bytes)

0x00000003 (PLTGOT)                     0xcc588

0x00000002 (PLTRELSZ)                   1032 (bytes)

0x00000014 (PLTREL)                     REL

0x00000017 (JMPREL)                     0x22144

0x00000011 (REL)                        0x21774

0x00000012 (RELSZ)                      2512 (bytes)

0x00000013 (RELENT)                     8 (bytes)

0x6ffffffa (RELCOUNT)                   4012

0x00000000 (NULL)

时间: 2024-10-03 01:50:53

[转]Android下怎么使用LDD查看依赖库的相关文章

Kotlin编程开发Android运用程序(Volley+Gson依赖库)

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> Kotlin编程开发Android运用程序(Volley+Gson依赖库) - hexingen的博客 - 博客频道 - CSDN.NET hexingen的博客 目录视图 摘要视图 订阅 [活动]2017 CSDN博客专栏评选 &nbsp [5月书讯]流畅的Pyth

linux下JUCE源码编译依赖库

JUCE 源码https://github.com/julianstorer/JUCE 想在ubuntu下编译需要提前安装以下依赖库 sudo apt-get install mesa-common-dev libgl1-mesa-dev libglu1-mesa-devsudo apt-get install freeglut3-devsudo apt-get install build-essential gdb subversionsudo apt-get install automake

linux下用于二进制程序及其依赖库的移植的脚本

#!/bin/bash ##指定移植目录 DEST=/mnt/sysroot #依赖库文件拷贝 libcp() { LIBPATH=${1%/*} [ ! -d $DEST$LIBPATH ] && mkdir -p $DEST$LIBPATH [ ! -e $DEST${1} ] && cp $1 $DEST$LIBPATH && echo "copy lib $1 finished." } #程序本身的拷贝 bincp() { CMD

Android Studio将Eclipse的项目作为module的依赖库

情形: 我们现在有一个eclipse的项目,我们想把这个项目作为android studio的module的一个依赖库. 以前我们在eclipse的时候常常是在一个工作区里面把一个A工程 as a liarary一下,然后这个A 工程就不再是一个工程了,而是一个依赖库了,然后其他的B工程就可以依赖这个依赖库了 那么这个情形我们在AS里面怎么实现呢 注意: eclipse的工作区间等于as的project eclispe的project等于as的module 1.当前情况 当前as配置:Andro

UNIX环境下用C语言写静态库与动态库

静态库,动态库用UNIX 的术语来说,或者叫做归档文件(archive 常以.a 结尾)和共享对象(share object 常以lib 开头.so 结尾)更为准确.静态库,动态库可能是WINDOWS 下的术语,但两者的概念是一样的.下面统一说静态库和动态库. 静态库,就是一大堆object (CC ,CC 在LINUX 下其实是软件链接到GCC 的,编译后默认为.o 结尾的)的集合.静态库就是用ar 等工具集合在一起.在编译的时候,连接器就会将这部分代码嵌入到目标代码里. 动态库,也是一大堆o

Eclipse中引用依赖库library失败的原因

分两种情况 情况一: 如下出现红叉:说明库与项目不在同一个目录下 即在windows下项目必须和library在同一个目录下,否则会出错 情况二 如下MPChartLib为绿钩,当确定OK时,在回来时却没有应用 原因此时项目下project.properties文件不可写,为只读状态(多为协同工具导致的) 解决直接进入project.properties文件,直接写入:android.library.reference.3=../MPChartLib(依赖库的方式即使这样的) 或者将projec

发现一个好用的Android文件访问工具--es文件管理器,可以在同局域网下的浏览器中查看手机中的文件

如题,发现一个好用的Android文件访问工具--es文件管理器,可以在同局域网下的浏览器中查看手机中的文件 1.在手机上打开es文件管理器的远程管理器,如图:                   2.保证手机和电脑在同一个局域网下(有线或者Wifi都可以) 贴一下我的地址: (1)我电脑的IP地址(有线宽带连接): (2)手机的地址(Wifi): 3.在别的手机或者电脑上打开上面的Url(我的是:ftp://192.168.1.115:3721/),打开后就是这样的: 3. 看一下刚才在手机上

【转】Android开源项目 分类 便于查看

之前转载了一个开源项目的文章,发现那些都是没有系统的总结,这里又转载一篇有系统总结的文章. Android开源项目系列汇总已完成,包括: Android开源项目第一篇——个性化控件(View)篇 Android开源项目第二篇——工具库篇 Android开源项目第三篇——优秀项目篇 Android开源项目第四篇——开发及测试工具篇 Android开源项目第五篇——优秀个人和团体篇 Android开源项目第一篇——个性化控件(View)篇 主要介绍那些不错个性化的View,包括ListView.Ac

小黑的日常折腾-复制外部命令的可执行文件和依赖库文件到指定目录下的对应目录

清明三天假期基本都是在写脚本中度过了,今天又折腾了一个新的脚本,该脚本的作用是快速复制一个或多个命令的可执行文件和依赖库文件到一个模拟的根文件系统下的相应目录下,这个脚本平时运维估计用不到,只有自己制作一个小的Linux发行版时才有可能使用该脚本. 脚本具体的功能如下: 1)提示用户选择要从文本中读取要复制的命令名还是从当前终端中交互式输入命令名. 2)用户选择前者,会自动使用vim打开一个文件,用户根据格式说明填入要复制的命令的名称,可以是多个命令,保存退出后自动执行复制操作. 3)用户选择后