【问题标题】:Compile framework with Xcode 9使用 Xcode 9 编译框架
【发布时间】:2018-12-23 22:33:26
【问题描述】:

当我使用 Xcode 8 编译框架并在新项目中导入之后,它成功构建并且我能够对其进行测试。但是当我使用 Xcode 9 编译框架并在新项目中添加构建的框架之后,我得到了:

Undefined symbols for architecture arm64:
  "___llvm_profile_runtime", referenced from:
      ___llvm_profile_runtime_user in xxxxxxxxx(DMCService.o)
      ___llvm_profile_runtime_user in xxxxxxxx(APXUserInterfacePresentor.o)
      ___llvm_profile_runtime_user in xxxxxxxxx(APXDevice.o)
      ___llvm_profile_runtime_user in xxxxxxxxx(APXInboxService.o)
      ___llvm_profile_runtime_user in xxxxxxxxx(AppoxeeManager.o)
      ___llvm_profile_runtime_user in xxxxxxxxx(APXApplicationSession.o)
      ___llvm_profile_runtime_user in xxxxxxxxx(APXInbox.o)
      ...
     (maybe you meant: ___llvm_profile_runtime_user)
ld: symbol(s) not found for architecture arm64

我使用 -lipo -info 架构检查构建的框架,它具有 arm64。 仅当我为真实设备构建框架时才会发生这种情况,如果我为模拟器构建它,它工作正常。所以我不知道为什么它不起作用?

提前感谢您的帮助。

【问题讨论】:

    标签: objective-c swift frameworks xcode9


    【解决方案1】:

    可能您的框架构建配置将“启用代码覆盖支持”设置(基础设置名称为 CLANG_ENABLE_CODE_COVERAGE)设置为 YES,而在包含框架的应用程序中,相同的设置设置为 NO。 为什么这会导致未定义符号错误:启用该设置会导致对检测函数的调用被注入到框架代码中。但是在构建应用程序时,定义这些函数的库没有链接。所以链接器(ld)失败了。

    再试一次,构建框架,将 Enable Code Coverage Support 设置为 NO。

    此外,为避免此类配置不匹配错误,您可能希望同时构建应用程序和框架,而不是分别预先构建框架。为此,您可以将框架项目包含为应用项目的子项目,或者创建一个同时包含应用项目和框架项目的 Xcode 工作区。

    【讨论】:

    • 感谢您的帮助和解释。它现在就像一个魅力 :) 我会听取你对一个包含框架的工作区的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    相关资源
    最近更新 更多