在iOS中将静态库包含在动态框架中

16

我需要为正在开发的项目创建一个框架(需要一个静态库)。我使用了这篇教程来创建框架,然后将静态库复制到项目中,它可以正常工作。

但是,当我将这个框架拖到 iOS 项目中时,出现了许多错误。

`Undefined symbols for architecture i386:"_OBJC_CLASS_$_SomeClassFromTheStaticLibrary",referenced from:_OBJC_CLASS_$_AnotherClass in MyFramework`

我认为发生的情况是iOS项目想要重新编译框架,但它找不到静态库,所以会出现错误。如果将静态库添加到iOS项目中,则所有错误都会消失。但这正是我想避免的。

基本上我想要实现iOS项目->框架->库,而不是在项目和框架中都有该库。

我尝试将静态库作为框架的资源添加,但没有成功。


有没有解决你的问题的办法啊?我这里也遇到了类似的问题。 - A for Alpha
我已经解决了它,但我有点作弊。我可以访问所有三个项目的源代码,所以我将静态库重新编译为框架。这样,我就有了iOS项目->框架->框架,并且只需要导入一个框架。 - olivaresF
还没有真正的解决方案吗?如果我将静态库包含到iOS项目中,甚至无法摆脱这个问题... - b00tsy
3个回答

1
我觉得这似乎不太可能。当你考虑正在发生的事情时,你会看到问题所在。
1. 框架被编译并处理静态库,例如去除额外的符号。 2. 应用程序现在被编译和链接到框架上,该框架可能具有或没有应用程序需要的符号。 如果只有框架使用静态库(逻辑上),我确实让它起作用了,但我找不到一种方法来跨框架和应用程序共享代码。

0
如果一个符号被隐藏了(无论是通过默认情况下符号被隐藏/GCC_SYMBOLS_PRIVATE_EXTERN设置为是或应用于某些符号的__attribute__((visibility ("hidden"))),那么当静态链接库时该符号将可用,但是当动态链接框架时则不可用。
确保静态库的符号未被隐藏,这样您就可以从应用程序中访问它们。

-2

我按照这个链接创建了自定义框架。我的框架里有静态库,它可以正常工作。

我在我的博客中复制了他的步骤以便理解,并附上了一个脚本使其通用化。


你的静态库在哪里?你在构建阶段选项卡中链接了它们吗? - olivaresF

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接