将C库编译为iPhone框架?

12

每个 C/C++ 库都有一些必须使用该库的头文件。如果您使用 1-2 个以上的库,自定义头文件路径可能会成为一个麻烦。

所以我想:是否有一种方法可以将 C 库编译为框架。静态库 + 头文件 + 版本控制。

我在 XCode 模板中找到了 Cocoa 框架的内容,但没有关于 iPhone 框架构建的信息。这一简单步骤可以让开发人员构建并共享包含一些有趣代码的框架。

同时,将 libpng、libjpeg 等库打包为框架也是很好的选择。

我不会在这些框架中使用动态库。只会存在静态版本。


2
我的 'foo_framework' 使用 quux_framework_20101231;你的 'bar_framework' 使用 quux_framework_20110224。我想在我的程序中同时使用我的框架和你的框架...但是 quux_framework_20101231 和 quux_framework_20110224 是不兼容的。现在怎么办? :) - pmg
每个框架都包含版本文件夹。因此,foo.framework将使用“quux.framework/versions/1.0”,而bar.framework将使用“quux.framework/versions/1.2”。如果您的库通常依赖于框架,则只需链接到“quux.framework”。据我所知,所有这些都是如此。 - Evgen Bodunov
我已经移除了C++标签,因为您正在寻找将C代码转换的方法,而C++与问题并不相关。 - Puppy
3个回答

5
我将我在这里这里找到的技术结合起来,应用到我的开源库这里注意 - 我已经从该项目中删除了相关脚本。我更新了链接,指向最后一个包含这些技术的修订版本)。我认为这基本上就是你要寻找的解决方案。
基本上,它有一个目标,可以构建一个fat静态库(lipo构建arm6、arm7和i386)。它还有另一个目标,将该库构建成一个框架。
你完全可以使用相同的技术来处理C项目。实际上,我已经开始使用相同的技术将C VTD XML解析器移植到Objective C框架中。

+1 对于正确答案和在确切术语方面教育其他发帖人 - Till
很棒,看起来是正确的答案。 :) 我会尽快检查它。谢谢。 - Evgen Bodunov

2

框架基本上只是动态/共享库的捆绑包。由于这在App Store中是不允许的,因此您必须在编译时构建静态库并将其与应用程序的可执行文件链接。

然而,为了减轻一些痛苦,您可以为每个库创建一个Xcode项目,并将每个库编译为静态库。另一种方法是将所有所需的源文件放入主Xcode项目中,并适当配置它以便一次性构建所有内容(例如,我使用小型库Minizip)。

希望这有所帮助。


苹果不允许只使用动态库。我很乐意只在我的框架中使用静态版本。目前,我使用单独的项目,有许多目标,每个目标一个库。并且我将该项目作为外部依赖项在我的应用程序项目中使用。所以它足够灵活,但我想要更多。:)) - Evgen Bodunov

1

你正在尝试解决的问题已经存在了 - 它被称为DLL地狱

对于制作小型应用程序和组织源代码/头文件结构,最好的方法是坚持使用老式的静态库。


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