有没有从ndk-build输出组件的选项?

有没有从ndk-build输出组件的选项?

问题描述:

我不知道是否有任何选择从ndk构建输出程序集? 我尝试在LOCAL_CFLAGS中输入-save-temp,但未能生成。它告诉我这是一个无法识别的选项。不知道是否谷歌得到它删除在i686-android-linux像这个链接所声称的http://code.google.com/p/vs-android/issues/detail?id=47有没有从ndk-build输出组件的选项?

原油解决方法:把-S置于LOCAL_CFLAGS;运行ndk-build会失败,但检查在./obj/local/armeabi/objs-debug/中创建的.o文件,你可能会发现它包含程序集:-)

+0

我只能到.../objs有.o文件的路径。但是,它没有程序集:( – ys126 2012-04-13 02:09:38

+0

如果我没有在上面写清楚,我的意思是你必须使用文本编辑器检查.o文件的内容,在我的情况下它包含程序集。 – gfour 2012-04-13 08:04:42

+0

抱歉gfour我在第一次评论前检查了这个文件,它包含了所有已经完全编译好的对象的代码,它不是人类可读的,顺便说一下,我正在编译x86,也许这会导致你的方式无法工作? – ys126 2012-04-13 09:24:09

我发现有两种方法可以做这个。

LOCAL_CFLAGS += -save-temps 

请注意单个短划线和拼写(不是问题中提到的保存临时文件)。这些文件被保存到构建的工作目录中,通常是*项目文件夹。尽管这样可以使文件更容易找到,但是如果在不同的文件夹中有多个具有相同名称的文件,或者您正在为多个ABI构建(尽管您可以在Application.mk中进行限制),则可能会遇到问题。

另一种方法使用LOCAL_FILTER_ASM,它将程序集文件放置在与源目录布局相匹配的目标文件旁边,并针对不同的ABIs使用不同的路径。

LOCAL_FILTER_ASM := cp 

设置此变量使得NDK建立输出到组件的第一,然后运行到“过滤器”的编译器的组件输出的命令,并且然后组装经滤波的输出。您需要将其设置为接受两个表示源路径和目标路径的参数的命令。幸运的是,cp命令已经接受源路径和目标路径,因此可以直接用作无操作过滤器。

构建后,您可以在OBJ /本地/ [ABI]/OBJ文件/ [模块]你的汇编文件/ __ /路径到file.s

由于使用LOCAL_FILTER_ASM功能也将成为带“.filtered.s”扩展名的文件的另一个副本,但这不会造成任何伤害。