7

我正在开发一个使用 NDK 的应用程序(我写的所有内容都发生在 r6b 和 r8d 上)

一切正常,我想开始尝试调试我的 C 代码。

我遵循了这个http://tools.android.com/recent/usingthendkplugin教程,但是NDK_DEBUG = 1标记到我的构建命令,突然我开始在代码中遇到错误,即使删除该标记后也没有消失,从 Android 4.2 更改。 2 回到 2.2,改变我正在使用的 NDK,或者我能想到的任何其他东西。

问题现在发生在这样的语句中

#ifdef __ANDROID__
some cool android code
#else
some pretty awesome iOS code
#endif

__ANDROID__由于某种原因没有定义,导致 Eclipse 并ndk-build尝试编译 iOS 代码而不是 Android 的代码会发生什么

恢复我所做的一切似乎没有任何效果。重新启动eclipse也没有。清理项目,完全删除libsobj目录也不起作用..

有什么建议么?

谢谢!

编辑:

也许值得补充的是,使用 ndk-build 成功完成构建本身。我认为这可能是一个日食问题,但即使是这样,它仍然是一个错误,我无法启动该应用程序

另外,以防万一,重新启动计算机也不起作用。

编辑2:问题存在于通过网络运行相同工作区的另一台计算机上,我的猜测与工作区有关,所以我尝试删除.metadata文件夹并再次添加项目。

删除.metedata文件夹第一次修复了它,但几分钟后(我设法在我的平板电脑上构建和运行应用程序)同样的问题又回来了,删除.metadata没有用

编辑 3:

还是不行。

但是,我可以确认这不是项目特定的问题,因为所有在 Eclipse 中具有 Native 支持的项目现在都这样做了。

其他不起作用的事情:

  • 创建一个空项目,添加原生支持。
  • 完全切换到另一个不相关的工作空间并执行上述测试
  • 下载新版本的 eclipse (juno), CDT& ADT(正在使用 eclipse ADT 包)
4

3 回答 3

12

只是让你知道:

  • 当您使用Android.mk文件和ndk-build时,ANDROID宏是预定义的(-DANDROID使用详细输出构建时请参阅额外的 C 标志),
  • 但如果您使用 Android Standalone Toolchain,则__ANDROID__改为预定义。

所以我建议你使用:

#if defined(ANDROID) || defined(__ANDROID__)
  /* ... */
#endif
于 2013-03-11T09:54:02.080 回答
5

显然,只要提供正确的选项,它就应该在内部定义__ANDROID__一个特定的GCC 宏。但是,由于对选项的控制主要委托给 NDK,因此不应依赖__ANDROID__宏的定义。就我们所知(或关心)而言,NDK 背后的编译器可能不是 GCC。使用 NDK 时,请检查ANDROID.

编辑:clang 现在也定义了__ANDROID__

于 2015-01-30T16:19:59.867 回答
1

如果其他人遇到此问题:

我在另一台计算机上打开了工作区(工作区位于 Dropbox 文件夹中),但问题仍然存在于另一台计算机上,这可能只是工作区问题,所以我从工作区中删除了 .metadata 文件夹。

我不得不重新添加项目,但这样做之后,现在一切似乎都正常了。

于 2013-03-11T00:58:21.807 回答