Eclipse ndk插件正确索引纯C文件

eclipse的NDK插件可以把android工程添加native support,可以利用eclipse CDT插件来编写c/c++代码,通过ndk编译,甚至断点调试c/c++代码。通过 project -> 右键菜单 -> android tools -> Add native support 来完成。


通过 add native support 以后是可以正确索引c++代码, 包括NDK提供的头文件都可以使用CDT工程一样。但是,当把cpp文件改成c文件以后,会发现所有的头文件index全部不正确了,导致cdt各种检索不到头文件的错误。但是把C文件改回CPP就又对了,很是奇怪。


经过纠结的无头绪的排查,发现问题非常隐蔽。在NDK提供的头文件中,纯C的头文件中都添加了如下的宏判断:

#ifdef __cplusplus
extern "C" {
#endif



#ifdef __cplusplus
}
#endif


这是为了在c++编译器中编译C代码提供的扩展。也就是说 extern “c” 只有 c++编译器认识,c的编译器是不认识的。打开这些头文件,也明显看到这宏是被定义的,所以CDT在对c文件进行索引的时候,无法识别 extern “c” 所以会报错,但是NDK是可以正确编译的。


但为什么宏__cplusplus会是定义。如果是CDT的工程,c工程是不会定义的,c++工程是会定义。NDK插件在添加CDT支持的时候一定是添加这个宏定义。事实上,果然是这样的。在添加native support支持的时候,会在workspace -> .metadata -> .plugins -> com.android.ide.eclipse.ndk 文件夹下,添加一个工程的描述文件。在这个文件里面都是一些编译器预定的宏定义,其中就有__cplusplus这个定义。也就是NDK插件默认认为CDT的工程是一个c++工程。


如果,我们使用的是纯C的工程,那么我们就需要把这个宏给删去,才能正确的应用NDK的头文件。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值