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

发布于 2025-01-03 08:35:23 字数 406 浏览 1 评论 0原文

我正在使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

爱冒险 2025-01-10 08:35:23

请参阅此处如何禁用优化:Android NDK assert.h 问题

基本上您需要做的就是添加

APP_OPTIM := debug

到您的 Application.mk 文件中

See here how to disable optimizations: Android NDK assert.h problems

Basically what you need to do is to add

APP_OPTIM := debug

to your Application.mk file

白龙吟 2025-01-10 08:35:23

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

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

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

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

readelf -A myfile.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.

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

Another possibility is to check the arch-specific flags on a built binary file (.o or executable).

readelf -A myfile.o

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文