如何编译具有第三方依赖关系而不包含依赖关系的静态库?

时间:2014-02-21 02:54:23

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

TL; DR

  • 如何在不包含我引用的第三方库的情况下构建静态库?

您好,

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

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

谢谢。

2 个答案:

答案 0 :(得分:1)

您可以将lib.a和lib.h添加到项目中。

答案 1 :(得分:1)

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

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

(这也是为什么你可以为私人类定义@interface并将其正常使用而不会导致重复符号的原因。)

因此,您可以多次包含此类“干净”标题,而无需担心。请注意,我说'干净',因为你可以实际上在标题中定义符号,例如,如果你觉得特别邪恶,在标题中定义C函数甚至是Objective-C @implementation 。但你只需要测试一下。

当您最终链接第三方依赖关系和您的链接时,链接器会抱怨并且毕竟有重复的符号。在这种情况下,请务必查看nm等列出档案中符号的工具。