如何知道ndk-build的gcc优化级别

问题描述:

我正在使用NDK(jni)在Android上编写一些本机代码。 我想关闭gcc编译器优化。 现在我将LOCAL_CFLAGS += -O0添加到Android.mk,我不确定它是否正常工作。如何知道ndk-build的gcc优化级别

我写了一些代码来测试循环的开销是这样的:

// gettime 
for(int i = 0 ; i<10000;i++) 
{ 

} 
// gettime 

的时间差太小,我敢肯定的是,环已被删除的编译器。 我可以将i更改为volatile变量,但我想测试是否已正确关闭编译器优化。

如何知道gcc(ndk-build)使用的优化级别,我可以设置make以获取所有消息?

在此先感谢。

+0

10K'inc's很可能在10k个时钟周期内完成。即使在“慢”处理器上,这也是非常快的。 – Mat 2012-02-07 08:34:05

这里了解如何禁用优化:Android NDK assert.h problems

基本上你需要做的是

APP_OPTIM := debug 

添加到您的Application.mk文件

+0

它的工作原理!好感谢! – 2012-02-07 22:17:03

当启用优化时,编译器定义名为__OPTIMIZE__的宏。

如果将这些行插入到任何C文件中,那么如果make标志对该文件不起作用,则编译将失败。

#ifdef __OPTIMIZE__ 
#error Optimization enabled. That's not right! 
#endif 

另一种可能性是检查一个内置的二进制文件(.o或可执行文件)的具体拱形标志。

readelf -A myfile.o 

ARM有一个标志,指示优化级别,但我认为在Android工具链可能有点老要正确使用,所以因人而异。

+0

是的,我检查你的代码,'-O0'不工作,编译器只是抛出错误信息。那么如何正确关闭android-jni项目的优化? – 2012-02-07 17:09:32