如何让 NDK 工具链实用程序在 Mac OS X 上列出 NDK 构建库的符号(函数名称)?

How to get NDK toolchain utilities to list symbols (function names) of NDK-built library on Mac OS X?

我有几个由 NDK 构建的库,我正在尝试查看它们的导出符号,准确地说是可用的函数名称。一个是 .so 文件,另一个是 .a 文件。我在这个问题 () 中得到了帮助,找到了我认为我需要的实用程序。它们特定于 NDK 安装。我在 OS X fyi.

在我的 NDK 安装中,我在 prebuilt/darwin-x86_64/arm-linux-androideabi/bin 中找到了 nm 和 objdump。他们的文件类型是 "Alias"。当我 运行 nm -g libMylib.so 什么都没发生——根本没有。当我 运行 objdump -TC libMylib.so 我得到:"objdump: command not found"。然后我在 prebuilt/darwin-x86_64/bin 目录中找到了 arm-linux-androideabi-nm 和 arm-linux-androideabi-objdump 文件(文件类型在 Finder 中列为 "Unix Executable File")。尝试同时使用 结果是 "command not found"。在所有这些尝试中,我将 libMylib.so 放在了我正在尝试 运行.

的实用程序所在的文件夹中

我认为这基本上是关于如何在 unix 中调用二进制文件的一般问题;即使您在 运行 nm -g libMylib.so 时位于同一目录中,因为 . 通常不属于您的 $PATH。要 运行 正确的,请执行 ./nm -g libMylib.so,或者不使用 cd 先进入此目录,只需执行 path/to/your/NDK/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-nm -g libMylib.so,或先将此目录添加到您的路径:

export PATH=path/to/your/NDK/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin:$PATH
arm-linux-androideabi-nm -g libMylib.so

(最好将此目录添加到路径中,而不是 arm-linux-androideabi 目录,因为在执行 arm-linux-androideabi-nm 时调用时很清楚要调用哪个工具,而如果您添加另一个目录并调用nm,以$PATH中目录的顺序为准。)

参见例如Why do you need ./ (dot-slash) before script name to run it in bash? 有关 $PATH 的更多解释。