Gen*_*Liu 4 java-native-interface gcc makefile compiler-optimization android-ndk
我正在使用NDK(jni)在Android上编写一些本机代码.我想关闭gcc编译器优化.现在我添加LOCAL_CFLAGS += -O0
到Android.mk,我不确定它是否正常工作.
我写了一些代码来测试循环开销,如下所示:
// gettime
for(int i = 0 ; i<10000;i++)
{
}
// gettime
Run Code Online (Sandbox Code Playgroud)
时间差太小,我确信循环已被编译器删除.我可以更改i
为volatile变量,但我想测试是否已正确关闭编译器优化.
我怎么知道gcc(ndk-build)使用的优化级别,我可以设置make
为verbose来获取所有消息吗?
提前致谢.
请参见此处如何禁用优化:Android NDK assert.h问题
基本上你需要做的就是添加
APP_OPTIM := debug
Run Code Online (Sandbox Code Playgroud)
到您的Application.mk文件
编译器定义__OPTIMIZE__
在启用优化时命名的宏.
如果将这些行插入任何C文件,那么如果make标志不适用于该文件,则编译将失败.
#ifdef __OPTIMIZE__
#error Optimization enabled. That's not right!
#endif
Run Code Online (Sandbox Code Playgroud)
另一种可能性是检查构建的二进制文件(.o或可执行文件)上的特定于arch的标志.
readelf -A myfile.o
Run Code Online (Sandbox Code Playgroud)
ARM有一个标志,指示优化级别,但我认为Android工具链可能有点旧,因此正确使用,所以YMMV.