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

时间:2012-02-07 08:31:24

标签: gcc android-ndk makefile java-native-interface compiler-optimization

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

我写了一些代码来测试循环开销,如下所示:

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

}
// gettime

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

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

提前致谢。

2 个答案:

答案 0 :(得分:8)

请在此处查看如何停用优化:Android NDK assert.h problems

基本上你需要做的是添加

APP_OPTIM := debug

到您的Application.mk文件

答案 1 :(得分:6)

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

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

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

另一种可能性是检查构建的二进制文件(.o或可执行文件)上的特定于arch的标志。

readelf -A myfile.o

ARM有一个标志,指示优化级别,但我认为Android工具链可能有点旧,所以YMMV。