【发布时间】:2023-03-21 02:33:02
【问题描述】:
我一直在尝试构建一组可重用的应用程序开发库,但我开始遇到问题。
我的一个静态库是一组通用使用方法(Objective-C Foundation 类中的类别以提高其可用性),我倾向于在每个项目中使用它们。 (我们称它为 Lib A... 即 XCode 项目 A 生成 libProjectA.a)
然后我有其他静态库,包含数学专用代码的东西等。(我们将其称为 Lib B。) Lib B 链接到 Lib 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 开发,所以我不能使用 dylib,它们必须是静态的。
当它们相互依赖并避免重复符号时,如何将这些库包含在我的项目中?
【问题讨论】:
-
项目 B 链接到 Lib A 是没有意义的,尽管这听起来很奇怪。如果它们是动态库,那很好,但它们是静态库,即目标文件的存档,仅此而已。通过“链接”到库 A,您指示归档器从库 A 中获取所有对象并将它们添加到项目 B 中的所有对象中。
标签: objective-c xcode ios static-libraries reusability