__ANDROID__宏突然没有定义

时间:2013-03-10 22:54:09

标签: android macros android-ndk

我正在开发一个使用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支持的项目都会这样做。

其他不起作用的事情:

  • 创建一个空项目,添加Native支持。
  • 完全更改为另一个不相关的工作区并执行上述测试
  • 下载新版本的eclipse(juno),CDT& ADT(正在使用eclipse ADT包)

3 个答案:

答案 0 :(得分:7)

你知道吗:

  • 当您使用Android.mk文件和ndk-build时,ANDROID宏已预先定义(在使用详细输出构建时,请参阅-DANDROID额外C标志),< / LI>
  • 但如果您使用的是Android独立工具链,则预定义为__ANDROID__

所以我建议你使用:

#if defined(ANDROID) || defined(__ANDROID__)
  /* ... */
#endif

答案 1 :(得分:2)

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

编辑:clang现在还定义了__ANDROID__

答案 2 :(得分:0)

如果有其他人遇到此问题:

我在另一台计算机上打开了工作区(Workspace在Dropbox文件夹中),问题仍然在另一台计算机上,这只会导致工作区问题,所以我从工作区中删除了.metadata文件夹。 / p>

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