| '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`'. |
| |