blob: 16005c4c6322a481648c2fa7cea1b995c838a78f [file] [log] [blame]
'ndk-depends' Overview
===
Introduction:
-------------
The `ndk-depends` tool that comes with this Android NDK allows you to dump
the ELF dependencies of a given ELF shared library or executable.
With the --print-java option, it can also be used to generate a Java
source fragment to load your native library and its dependencies in the
correct order (see example below).
Use '`ndk-depends --help`' for complete usage information.
This tool is designed to support:
- Either 32-bit or 64-bit ELF binaries.
- Either little-endian or big-endian ELF binaries.
- Unicode file paths, on Windows.
Note: The Windows binary will NOT work with Cygwin paths !
Examples:
---------
* `ndk-depends path/to/libfoo.so`
> Dump all dependencies of libfoo.so, in topological order, so
that any library listed in the result appears before any other
library it depends on.
* `ndk-depends --print-paths path/to/libfoo.so`
> Same as above, but also prints the path of the libraries on
your host file system.
* `ndk-depends -L some/other/path path/to/libfoo.so`
> Append 'some/other/path' to the search path for depending libraries
when looking at the dependencies for 'libfoo.so'
* `ndk-depends --print-direct path/to/libfoo.so`
> Only print the _direct_ dependencies of libfoo.so, and nothing
else, in the order they appear in the file.
* `ndk-depends path/to/libfoo.so --print-java`
> Prints a Java source fragment that corresponds to the load
of 'libfoo' with System.loadLibrary(). This lists all libraries
in reverse order, and ignores system libraries (e.g. libc.so).
* `ndk-depends path/to/libfoo.so --print-dot | dot -Tpng -o /tmp/graph.png`
> Prints the dependency graph as Graphviz .dot file, then generate
a PNG image for it.
* `ndk-depends --help`
> Print complete usage details.
Let's assume your project has the several libraries:
libfoo.so -> depends on libbar.so and libzoo.so
libbar.so -> depends on the system's liblog.so
libzoo.so -> depends on libbar.so
Then '`ndk-depends libs/armeabi/libfoo.so`' will typically print:
libfoo.so
libzoo.so
libbar.so
liblog.so
And '`ndk-depends --print-java libs/armeabi/libfoo.so`' will print:
System.loadLibrary("bar");
System.loadLibrary("zoo");
System.loadLibrary("foo");
This is handy to avoid computing the reverse library order yourself
for complex projects.
For more details, see the output of '`ndk-depends --help`'.