2

有没有办法在 Android NDK 上使用嵌套函数?这应该是可能的,因为 NDK 使用 gcc 对吗?

好吧,我尝试在 main 中定义一个函数,但编译器根本无法识别它。这是错误

错误:在“{”标记之前不允许函数定义错误:输入结束时应为“}”

4

4 回答 4

1

我不确切知道。但就 NDK 使用armgcc 编译器而言,嵌套函数可能在ARM 架构上被破坏——我最好的猜测是嵌套函数可能在 NDK 工具集中被禁用。无论如何 - 嵌套函数是 GCC 扩展,所以如果你希望你的代码是可移植的,你最好不要使用 gcc 扩展,而是使用 C89/C90 兼容代码。

于 2012-05-15T05:49:45.073 回答
1

这里的嵌套函数示例,其中 afoo()包含 a square(),编译并运行良好(在 Tegra 3 上)。我使用 NDK r8 android 工具链(使用 android-cmake,如果这有什么不同,那不应该是这种情况)。如果您使用旧版本,也许您应该尝试使用 r8?

于 2012-05-16T13:38:37.087 回答
0

是的,这应该是可能的。您可能需要将 -fnested-functions 标志添加到 gcc 调用。

于 2012-05-14T06:03:18.980 回答
0

嵌套函数需要一个可执行堆栈,在 Android 中默认禁用。

我花了难以置信的时间来弄清楚 - 但你需要在你的 CFLAGS 中添加以下内容:

-z execstack -Wa,--execstack

一切顺利!

于 2014-10-14T23:13:30.950 回答