如何确定 C 代码是为 Android/NDK 还是 iOS 编译的

Posted

技术标签:

【中文标题】如何确定 C 代码是为 Android/NDK 还是 iOS 编译的【英文标题】:How to determine C code is compiled for Android/NDK or iOS 【发布时间】:2011-05-19 17:26:13 【问题描述】:

我在 ios 应用和 android 应用中重用旧版 C 库。我想自定义一些宏定义(例如用于日志记录)。是否有标准定义来检查(使用#ifdef)代码是为 iOS 还是 Android/NDK 编译的?

【问题讨论】:

请不要为此使用#ifdef。编写可移植代码并将平台特定的问题放在具有通用接口的每个平台模块中。 放入不同的模块,分别使用不同的包含路径编译 一般来说,但必须平衡差异的大小与保持功能有序的愿望。过度使用抽象就像使用不足一样容易使代码不可读。如果我有一大块相同的代码,除了在 unix 系统调用中继承的 linux-vs-bsd 差异之外,我可能会在此处添加注释#ifdef,而不是发明一个新的便携式 unix 个人概念并将实现埋在从某个头文件中提取的内联函数中。 【参考方案1】:

__ANDROID__ANDROID 用于 Android(使用 NDK 编译) 和 __APPLE__ 在 Apple 平台(iOS 或 OSX)上

【讨论】:

它是没有下划线的ANDROID。谢谢。 不,它是__ANDROID__ 带有下划线。引用David Turner:“我建议现在明确定义__ANDROID__,它应该是NDK 用户应该再次测试的唯一内容”。【参考方案2】:

您应该考虑为那些具有单独的输出/bin 目录但共享源代码的平台创建两个单独的项目。然后你只需在项目属性中为 android 和 ios 设置一些定义,这样你就可以在编译时识别它

【讨论】:

以上是关于如何确定 C 代码是为 Android/NDK 还是 iOS 编译的的主要内容,如果未能解决你的问题,请参考以下文章

如何定位Android NDK开发中遇到的错误

Android NDK编译C/C++小结

Android NDK编译C/C++小结

如何使用cmake和Android NDK在C ++中加载线程支持

如何定位Android NDK开发中遇到的错误

android ndk是啥