【问题标题】:Static library use静态库使用
【发布时间】:2016-10-21 17:38:43
【问题描述】:

我有一个静态库,里面有另一个静态库。
我们称它们为 LibA 和 LibB。
LibA 是面向外部的库,或者换句话说,LibA 在内部调用 LibB,而 LibB 没有面向外部的函数调用。
LibA 的标头是 extern C,因此名称不会被破坏。
我已经使用 Swift 测试了这个库,它运行良好。
但是,当我尝试在 Obj-C 项目中使用它时,我收到以下错误:

 "_OBJC_CLASS_$_UIResponder", referenced from:


  _OBJC_CLASS_$_AppDelegate in AppDelegate.o


  "_OBJC_CLASS_$_UIViewController", referenced from:


  _OBJC_CLASS_$_ViewController in ViewController.o


 "_OBJC_METACLASS_$_UIResponder", referenced from:


 _OBJC_METACLASS_$_AppDelegate in AppDelegate.o


"_OBJC_METACLASS_$_UIViewController", referenced from:


 _OBJC_METACLASS_$_ViewController in ViewController.o


 "_UIApplicationMain", referenced from:


 _main in main.o


 ld: symbol(s) not found for architecture x86_64


 clang: error: linker command failed with exit code 1 (use -v to see invocation)

我确保 LibA 和 LibB 都是为 x86_64 架构构建的。
非常感谢任何帮助。

编辑:我能够解决这个问题。在 Build Phases 下,我必须将 UIKit.framework 添加到 Link Binary with Libraries。这修复了错误并允许我使用我的库。感谢您的帮助!

【问题讨论】:

  • 它抱怨的符号来自 UIKit。我猜这与您的实际应用有关,而不是与您的库有关。
  • 从 ~/Library/Developer/Xcode/DerivedData/ 中删除派生数据,然后清理,再次构建。希望它有效。
  • 这看起来 UIKit 没有在项目中链接。看到它在更大的项目中链接,或者从链接库中删除依赖项。我强烈建议转向动态框架。
  • 我确实尝试删除 DerivedData 文件夹,但不幸的是没有修复它。我确实注释掉了引用我的库的所有内容,并且错误仍然存​​在,所以这似乎是问题所在。关于如何解决这些问题的任何想法?
  • 如果你的库是静态链接的并且内部访问UIResponderUIViewController,链接器会失败。将UIKit.framework 添加到您应用的目标中。

标签: ios xcode static-linking objective-c++


【解决方案1】:

UIKit.framework 添加到您应用的目标中。

【讨论】:

    猜你喜欢
    • 2018-10-05
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 2015-03-06
    相关资源
    最近更新 更多