【问题标题】:Making Xcode ignore static library when building for iOS Simulator为 iOS 模拟器构建时使 Xcode 忽略静态库
【发布时间】:2014-06-25 08:21:14
【问题描述】:

我有一个 Xcode 项目,其中包含一个静态库项目,该项目使用另一个不支持 iOS 模拟器架构的静态库(Vuforia SDK:libQCAR.a)。

Vuforia SDK documentation 状态:

Vuforia 应用程序必须部署到设备上才能运行;它们不能在 iOS 模拟器中运行。

这是我的项目结构:

  • MyApp.xcodeproj
    • MyStaticLibrary.xcodeproj
      • 依赖于 libQCAR.a 的类
    • 框架
      • libMyStaticLibrary.a
      • libQCAR.a

我的问题是 MyApp.xcodeproj 不是为 iOS 模拟器构建的,因为 libQCAR.a 不是为 i386 架构构建的。

有没有办法让MyApp.xcodeproj 在为 i386 构建时忽略 libQCAR.a 库?我将能够使用 #if !(TARGET_IPHONE_SIMULATOR) 禁用所有依赖于库的代码

【问题讨论】:

    标签: ios objective-c xcode


    【解决方案1】:

    您可以使用conditional build settings 指定您希望仅在给定平台上链接的库,而不是以通常的方式将库添加到您的项目中。具体来说,您需要指定:

     -lQCAR
    

    在“其他链接器标志”中。

    看一下附件图片,应该会让事情更清楚(在我为模拟器链接的图片中,你会想要选择一个设备,我猜)。

    另外,不要忘记将包含库的目录的路径添加到“库搜索路径”构建设置(这不需要是有条件的;它不会对模拟器造成任何伤害)。

    【讨论】:

    • 我已经从“构建阶段”和项目中的引用中删除了libQCAR.a 文件,并为“任何 iOS SDK”添加了 -lQCAR(只是为了测试它是否可以在 iOS 设备上运行)。我已经指定了Library search path,但是在为我的 iOS 设备构建时编译器失败:ld: library not found for -lQCAR.a
    • 我猜你需要在“库搜索路径”中添加包含库的目录的路径;您还可以指定:-l/full/path/to/lib
    【解决方案2】:

    这个问题看起来很像:Xcode: Conditional Build Settings based on architecture (Device (ARM) vs Simulator (i386))

    我相信 sergio 的解决方案非常接近,但是您是否尝试过在 Other Linker Flags 下指定库的完整路径(可能没有“-l” - 只是路径)?

    【讨论】:

    • 终于!没有“-l”的部分起到了作用。我的设置是这样结束的:i.imgur.com/aHv97DD.jpg 非常感谢。
    • @ThomasClemensen 我不明白; sergio 的回答(回答此答案中链接问题的同一 sergio)还提到了 -l 标志的使用,他在此答案前 30 分钟回答了一些问题。
    • @ThomasClemensen 是的;那是因为 sergio 的回答演示了如何添加而不是删除 iPhone 模拟器的库。您只需要根据自己的需要反转条件。
    • 请记住,指定库的绝对路径不是一个好习惯,IMO - 尝试至少使用库的相对路径,如果它有效......或者,找出原因@ 987654324@,这是标准的链接方式,不适合你……:-)
    【解决方案3】:

    就我而言,它应该明确指定哪个 SDK 使用哪些标志。

    所以在Any iOS Simulator SDK 中,您不应该包含该库。

    Any iOS SDK 中,您应该包含它。就我而言,它是-lCloudReco

    【讨论】:

      猜你喜欢
      • 2013-01-26
      • 1970-01-01
      • 1970-01-01
      • 2018-02-25
      • 1970-01-01
      • 2023-04-08
      • 2021-03-14
      • 1970-01-01
      相关资源
      最近更新 更多