ios - 如何编译具有第 3 方依赖项而不包含依赖项的静态库?

标签 ios objective-c xcode cocoa-touch static-libraries

TL;博士

  • 如何构建静态库而不包含我引用的第三方库?

嗨,

在开始之前,我知道如何在 Xcode 中编译针对 iOS 设备和模拟器的静态库。但是,这一次我依赖于第三方库,我不想将其包含在静态库中。我只是想引用一下。但是,每当我构建静态库时,我都会遇到词法或预处理器错误,我知道当项目中缺少该库时,这种情况很常见。发生错误的原因是我从项目中删除了该库,因为我不想将其内置到静态库中。

有问题的库是 AFNetworking。在安装静态库时,我将使用 CocoaPods 显式安装依赖项。

谢谢。

最佳答案

当您引用外部代码时,您始终需要项目可以访问 header ,否则编译器将无法告诉您是否以正确的方式引用外部代码方式。例如。该方法是否存在,您是否提供了正确的类型等。

重复符号问题在您实际多次定义符号时才存在。例如,定义与类相关的 Objective-C 符号发生在 @implementation...@end block 中,发生在 中@interface...@end block 。后者只是让编译器理解事物的意义。

(这也是为什么您可以为私有(private)类定义一个 @interface 并正常使用它,而不会导致重复的符号。)

因此,您可以多次包含此类“干净” header ,而不必担心。请注意,我说“干净”,因为您可以实际上在 header 中定义符号,例如,在 header 中定义 C 函数,甚至是 Objective-C @implementation,如果你觉得自己特别邪恶。但您只需对此进行测试即可。

当您最终链接第 3 方依赖项和您的依赖项时,链接器会提示,毕竟存在重复的符号。在这种情况下,请务必查看诸如 nm 之类的工具,它列出了存档中的符号。

关于ios - 如何编译具有第 3 方依赖项而不包含依赖项的静态库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21924373/

相关文章:

ios - 何时在 xCode 6.4 中将 didMoveToView 或 initWithSize 与 SpriteKit 一起使用

ios - apple tv 支持音量控制吗?

ios - 如何访问对象库中的复选框、弹出按钮、单选组等

xcode - 将 Swift 应用程序的组件划分为 Swift 模块

android - OpenGL ES 2.0 Android至IOS Swift 3

iOS - 检测 UITableViewCell 被移出可见 View ?

objective-c - 单击UINavigationBar按钮时的光泽效果

ios - 向 UIScrollView 添加 UI 元素?

ios - 等待 instantiateViewControllerWithIdentifier 完成

ios - 删除单元格后使用自定义布局调整 UICollectionView 的大小