3

我正在尝试为 iOS 应用程序开发 C++ 库。该库加载 GLES 和 OpenAL 函数。这个想法是用 C++ 开发一个库,并在 iOS 和 Android 中使用相同的代码(都作为本机编译)。我只使用 iOS 实现,并且我已经使用库完成了一个示例应用程序,并且我在库中有这个块:

#ifdef _IPHONE_4_0

    #warning "Including iPhone SDK 4.0 working here" // 编译警告被激活

    #include <OpenGLES/ES2/gl.h>
    #include <OpenGLES/ES2/gext.h>

    #include <OpenAL/al.h>
    #include <OpenAL/alc.h>

    ...

#elif __ANDROID_API_ // 安卓

    #warning "Including Android working here" // 编译警告未激活
        ...

#万一

所以,问题出在“#ifdef _IPHONE_4_0”这句话上。如果我使用它,Xcode 找不到包含文件,但如果我评论所有if clausule(android 部分),Xcode 可以找到所有这些文件。

#warning语句显示编译器在编译时正在读取 iphone 部分(有和没有注释的行)。我是否需要以其他方式使用该定义?

提前致谢!

4

1 回答 1

1

查看这篇文章如何在 C 预处理器中可靠地检测 Mac OS X、iOS、Linux、Windows?

另外,据我所知,__IPHONE_4_0 宏仅在 iOS 4.0 SDK 中定义。因此,如果您使用的是其他版本的 SDK,该代码将无法正常工作。

另一种方法是在 Xcode 项目构建设置(“预处理器宏”字段)中定义您自己的宏,并将其命名为 IOS_BUILD,例如。它将在 Objective-c 和 c++ 代码中都可用

于 2012-10-11T13:06:25.010 回答