objective-c - 重复符号 : Include static lib A in static lib B, 还包括 XCode 项目中的库 A 和 B

标签 objective-c xcode ios static-libraries reusability

我一直在尝试为应用程序开发构建一组可重用的库,但我开始遇到问题。

我的一个静态库是一组通用方法(Objective-C 基础类的类别以提高它们的可用性),我倾向于在每个项目中使用它们。 (我们称它为 Lib A...即 XCode 项目 A 生成 libProjectA.a)

然后我有其他静态库,包含数学专用代码的东西,等等。(我们称之为库 B。)库 B 链接到库 A,因为它需要使用一些通用功能。 (即 XCode 项目 B 与 libProjectA.a 链接并生成 libProjectB.a)

在我的 XCode 项目中,我想包含并依赖 Lib A,因为它有我一直使用的通用内容。我还想包括并依赖 Lib B,因为我需要专门的数学功能。 (即我的应用程序项目想要与 libProjectA.a 和 libProjectB.a 链接)

但是,当我尝试构建我的 XCode 项目时,出现重复符号的错误,因为在 Lib A 中定义的符号也在 Lib B 中定义。

ld: duplicate symbol _OBJC_METACLASS_$_Foo in /Users/kenny/xcode_build/Release-iphonesimulator/lib_ApplicationCore.a(Foo.o) and /Users/kenny/xcode_build/Release-iphonesimulator/lib_SpecializedMath.a(Foo.o)

我怎样才能解决这个问题?我想开发可重用的库来加速我的应用程序开发,并通过测试/优化代码来提高稳定性。我是不是从错误的角度来看待这个问题?我正在为 iOS 开发,所以我不能使用动态库,它们必须是静态的。

当这些库相互依赖并避免重复符号时,如何将它们包含在我的项目中?

最佳答案

尽管库 B 依赖于库 A,但您实际上并不希望将 A 中的所有对象放入 B 中,这就是您在它的外观上所做的。我不确定你是如何做到的,但我想当你构建 Lib B 时你会链接到 Lib A?如果是这样,只需从 Lib B 的构建行中省略 Lib A。Lib A 中的所有符号在 Lib B 中都是未定义的。

静态库只是目标文件的归档,所以两者应该完全分开。当您需要链接库 B 时,只需同时指定库 A。

关于objective-c - 重复符号 : Include static lib A in static lib B, 还包括 XCode 项目中的库 A 和 B,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5253123/

相关文章:

ios - 如何从任何 View 导航到初始 View Controller

xcode - 如何只制作 subview 景观?

iphone - 从我们的应用程序管理 iPhone 日历事件

iphone - Facebook iOS SDK : isSessionValid returns no, 但当我实际登录时

objective-c - 图像特定区域的平滑

ios - 从 Storyboard加载时,fontSize 始终为 17

ios - RaptureXML 迭代 :usingBlock warning and crash

ios - iOS 13 撤消/重做手势的手势识别器在哪里?

iphone - KVO : Apparently the same "effective" keyPath produce different results

iphone - @synthesize window=_window 有什么作用?