【发布时间】:2014-07-22 07:23:37
【问题描述】:
我正在编写一个依赖于第三方静态库 libthirdparty.a 的框架 Stuff.framework(供私人使用),但我不想将该库嵌入到框架中。 SomeApp.app 将使用该框架(除其他外)。
为了简单起见,我们假设我们同意嵌入是不好的。
如果我正在编写库 libstuff.a 而不是框架,我根本不会将 libstuff.a 与 libthirdparty.a 链接。 SomeApp.app 将链接到 libstuff.a 和 libthirdparty.a - 没问题。
这种方法不适用于框架。如果 Stuff.framework 没有链接 libthirdparty.a,则链接器会给出“未定义符号”错误。如果 Stuff.framework 确实链接了 libthirdparty.a,那么库的内容会嵌入到框架中,这是我要避免的。
那么,有谁知道如何实现第一段所述的目标?我想这是静态库和动态库之间的区别,但也许有可以解决它的链接选项。
【问题讨论】:
-
您正在尝试请求动态绑定到静态库。这真的不会发生。库静态链接到框架有什么问题?此外,链接和“嵌入”是不同的概念。我不确定你所说的嵌入是什么意思。
-
如果答案是“那是不可能的”,那很好——我不会再浪费时间了。我的理解是静态库的代码被复制到框架中。假设您有两个使用同一个库的框架,并且都被应用程序使用 - 现在您在应用程序中有重复的符号。更糟糕的是,如果框架使用不同版本的库怎么办?和/或应用程序本身也使用该库?很有可能,例如。如果他们都使用给定的日志库。
-
这是 OS X,对吧?如果您发布了一个中间 dylib,您的应用程序将动态解析符号,这将调用 dylib 中的集成静态代码,而不必处理所有这些共享静态库的废话。
标签: objective-c macos cocoa