【问题标题】:Ignore a Library in an iOS app to compile for simulator忽略 iOS 应用程序中的库以编译模拟器
【发布时间】:2016-11-25 23:37:43
【问题描述】:

我看到一些帖子已经引用了我的问题并解决了它,但它在 2 年前很活跃,我尝试使用它但它对我不起作用(可能是 Xcode 或其他东西的不同) 这是相关的帖子:

我有一个项目使用 vuforia,一个 c++ 库,但是这个库与模拟器不兼容。我想为模拟器编译我的项目(即使使用 lib 的部分显然不起作用)以测试我的应用程序的其他功能。

在我的构建设置中,我有这个:

标题搜索路径:../../build/include

库搜索路径:../../build/lib/arm

我在Other Linker Flags

中什么都没有

在帖子之后,我尝试专门为模拟器删除 lib,我目前有:

编译错误发生了变化,现在在我的一个使用 lib 的视图控制器中“找不到 Vuforia/Vuforia.h 文件”。

所以我处理了它,并添加了预处理器指令

#if !(TARGET_OS_SIMULATOR)
....
#endif

它适用于大多数情况,但一个错误仍然存​​在,即使它位于如上所示的块内

#if !(TARGET_OS_SIMULATOR)

#import <QuartzCore/QuartzCore.h>
#import <OpenGLES/ES2/gl.h>
#import <OpenGLES/ES2/glext.h>
#import <sys/time.h>

#import <Vuforia/Vuforia.h>
#import <Vuforia/State.h>
#import <Vuforia/Tool.h>
#import <Vuforia/Renderer.h>
#import <Vuforia/TrackableResult.h>
#import <Vuforia/VideoBackgroundConfig.h>
...
#endif

最后,我也尝试使用 Other Linker Flags,但没有帮助...

你能帮我找到如何为iOS设备绑定库并在模拟器上运行应用程序吗?

谢谢!

【问题讨论】:

    标签: c++ ios xcode ios-simulator


    【解决方案1】:

    我会避免设置不同的标题搜索路径。

    使用您提到的 TargetConditionals.h 在为模拟器构建时禁用 Vuforia。然后,为了处理链接,我建议使用 OTHER_LDFLAGS 而不是“与库链接”构建阶段,因为您无法按平台对该构建阶段进行条件化。您可以使用以下 xcconfig 轻松完成此操作:

    OTHER_LDFLAGS = -framework Vuforia
    OTHER_LDFLAGS[sdk=*simulator] =
    

    【讨论】:

    • 感谢您的回复!我试过了,但我仍然有同样的错误,我认为链接很好:当我以 iPhone 为目标时它编译,模拟器的错误是 'Vuforia/Vuforia.h' 文件未找到。这是因为模拟器的取消链接有效。当我像上面提到的那样使用 TargetConditionals.h 时会出现问题。我尝试了 if define else define endif 并且该值在 iPhone 上很好,所以它应该可以工作,并且错误仅针对一个文件,而我在多个文件中使用 TargetConditionals...
    • 如果您在为模拟器编译时遇到“找不到文件”错误,则说明您没有正确保护包含 TARGET_OS_SIMULATOR 条件的包含。
    • 我找到了!这是因为我没有在我使用 #if !(TARGET_OS_SIMULATOR) 的所有地方都包含 TARGET_OS_SIMULATOR 的 .h。它现在正在工作!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2012-02-22
    • 2023-04-05
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多