如何知道 ndk-build 的 gcc 优化级别
我正在使用 NDK(jni) 在 Android 上编写一些本机代码。 我想关闭gcc编译器优化。 现在我将 LOCAL_CFLAGS += -O0
添加到 Android.mk,我不确定它是否有效。
我写了一些代码来测试循环开销,如下所示:
// gettime
for(int i = 0 ; i<10000;i++)
{
}
// gettime
时间差太小,我确信循环已被编译器删除。 我可以将 i
更改为易失性变量,但我想测试是否已正确关闭编译器优化。
我如何知道 gcc(ndk-build) 使用的优化级别,我可以将 make
设置为 verbose 来获取所有消息吗?
提前致谢。
I was writing some native code on Android using NDK(jni).
I want to turn off the gcc compiler optimization.
For now I add LOCAL_CFLAGS += -O0
to Android.mk, I'm not sure if it is working.
I wrote some code to test the loop overhead like this:
// gettime
for(int i = 0 ; i<10000;i++)
{
}
// gettime
The time difference is too small that I'm sure that the loop has been deleted by the compiler.
I can change i
to a volatile variable, but I want to test if I have turned off the compiler optimization correctly.
How can I know the optimization level that is used by gcc(ndk-build), can I set make
to verbose to get all the messages?
Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
请参阅此处如何禁用优化:Android NDK assert.h 问题
基本上您需要做的就是添加
到您的 Application.mk 文件中
See here how to disable optimizations: Android NDK assert.h problems
Basically what you need to do is to add
to your Application.mk file
当启用优化时,编译器定义一个名为
__OPTIMIZE__
的宏。如果将这些行插入到任何 C 文件中,并且 make 标志不适用于该文件,则编译将会失败。
另一种可能性是检查构建的二进制文件(.o 或可执行文件)上特定于架构的标志。
ARM 有一个标志来指示优化级别,但我认为 Android 工具链可能有点旧,无法正确使用它,所以 YMMV。
The compiler defines a macro named
__OPTIMIZE__
when optimization is enabled.If you insert these lines into any C file, then the compile will fail if your make flags didn't work for that file.
Another possibility is to check the arch-specific flags on a built binary file (.o or executable).
ARM has a flag that indicates the optimization level, but I think the Android toolchain might be a little old to use that correctly, so YMMV.