我正在开发一个使用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并不是很好。清理项目,完全删除libs
和obj
目录也不起作用..
有什么建议吗?
谢谢!
编辑:
也许值得补充的是,构建本身,使用ndk-build成功完成。 我认为这可能是一个日食问题,但即便如此,它仍然是一个错误,我无法启动应用程序
此外,以防万一,重新启动计算机也无法正常工作。
编辑2:
在网络上运行相同工作区的另一台计算机上存在问题,我的猜测是与工作区有关,所以我尝试删除.metadata
文件夹并再次添加项目。
第一次删除.metedata
文件夹修复它,但几分钟后(我在平板电脑上设法构建并运行应用程序)返回了相同的问题,并删除了.metadata
没用?
编辑3:
仍然没有。
但是,我可以确认这不是项目特定的问题,因为现在所有在eclipse中拥有Native支持的项目都会这样做。
其他不起作用的事情:
CDT
& ADT
(正在使用eclipse ADT包)答案 0 :(得分:7)
你知道吗:
Android.mk
文件和ndk-build
时,ANDROID
宏已预先定义(在使用详细输出构建时,请参阅-DANDROID
额外C标志),< / LI>
__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>
我不得不重新添加项目,但在这样做之后,现在一切似乎都有效。