我想知道是否有任何选项可以从 ndk-build 输出程序集?我尝试在 LOCAL_CFLAGS 中放入 -save-temp 但未能构建。它告诉我这是一个无法识别的选项。想知道谷歌是否像这个链接中声称的那样在 i686-android-linux 中删除了它http://code.google.com/p/vs-android/issues/detail?id=47
2 回答
我发现有两种方法可以做到这一点。
LOCAL_CFLAGS += -save-temps
注意单个破折号和拼写(不是问题中提到的 save-temp )。这些文件被保存到构建的工作目录,通常是顶级项目文件夹。虽然这使得文件更容易找到,但如果您在不同的文件夹中有多个同名文件,或者您正在为多个 ABI 构建(尽管您可以在 Application.mk 中限制),您可能会遇到问题。
另一种方法使用 LOCAL_FILTER_ASM,它将程序集文件放置在目标文件旁边,这与源目录布局相匹配,并对不同的 ABI 使用不同的路径作为目标。
LOCAL_FILTER_ASM := cp
设置此变量会使 NDK 构建输出首先转换为汇编,然后运行命令以“过滤”编译器的汇编输出,然后汇编过滤后的输出。您需要将其设置为一个命令,该命令接受代表源路径和目标路径的两个参数。值得庆幸的是,该cp
命令已经接受源路径和目标路径,因此可以直接用作无操作过滤器。
构建后,您可以在 obj/local/[abi]/objs/[module]/__/path-to-file.s 中找到您的程序集文件
由于使用了 LOCAL_FILTER_ASM 功能,还会有另一个扩展名为“.filtered.s”的文件副本,但这不会造成任何伤害。
粗略的解决方法:将 -S 放入 LOCAL_CFLAGS;运行然后 ndk-build 将失败,但检查在 ./obj/local/armeabi/objs-debug/ 创建的 .o 文件,您可能会发现它包含程序集:-)