如何知道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
以获取所有消息?
在此先感谢。
它的工作原理!好感谢! – 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工具链可能有点老要正确使用,所以因人而异。
是的,我检查你的代码,'-O0'不工作,编译器只是抛出错误信息。那么如何正确关闭android-jni项目的优化? – 2012-02-07 17:09:32
10K'inc's很可能在10k个时钟周期内完成。即使在“慢”处理器上,这也是非常快的。 – Mat 2012-02-07 08:34:05