gpt4 book ai didi

ios - 如何组合胖静态库以在 iOS 应用程序中使用?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:58:50 25 4
gpt4 key购买 nike

在阅读静态库和动态库,最后阅读框架、Cocoa Touch 框架和 Cocoa Touch 静态库时,我感到非常困惑。

我唯一理解的是静态库(框架?)是在编译 时添加的,而动态库则不是;它们在运行时动态加载。

问:

我想向我的 iOS 应用程序添加几个静态库(它们以“.a”结尾,通用胖二进制文件,针对 armv7 和 arm64 等 iOS 架构编译)。如果可能的话,最好将所有这些库组合在一起(...到一个框架?)。我还想围绕这些 C 库编写一个 Swift 包装器。这个包装器最终将在我的应用程序中使用。但是,包装器不应成为我的应用程序的一部分,我想要一个单独的项目(还是一个框架?)(库和包装器可以组合在一起吗?)。

我目前正在尝试做的是编写 Swift 包装器。所以我从 Cocoa Touch Framework 开始(因为我认为那是最好的主意),添加了 C 库和 header (实际上是通过 podspec,我认为这并不重要,因为我也可以手动添加它们) ,添加了一个桥接 header (尽管其他一些用户报告的框架不适用于桥接 header ,但我的确实构建成功)。这是正确的方法吗?

我看的第一篇文章was this one (called "Static and Dynamic Libraries and Frameworks in iOS") .

然后,我在 stackoverflow 上阅读了很多关于如何编译静态库、库和框架的结构的文章,框架实际上只是一堆库及其 header (或类似)。
我也觉得这些年来 Apple 的情况发生了变化,比如他们改变了名称和可能性(Cocoa Touch Framework(这是一个动态框架吗?)似乎已经在 iOS 8 等版本中引入),这使得对我来说更难理解事物是如何运作的。
不要误会我的意思,我之所以这么说是因为我想表明我确实做了一些研究(我认为很多),但我真的需要一些帮助才能把一切都做好。基本上,我只是在寻找我应该采取的下一步,以便将所有这些库导入我的应用程序。

最佳答案

这有两个部分:

  • 创建框架 Mach-O 图像
  • 整理标题

第一部分应该相对简单。如果您创建一个框架目标并向其添加一堆静态库,则生成的框架将包含所有这些静态库。

唯一复杂的是 Objective-C。如果您的任何静态库包含 Objective-C 代码,链接器最终可能会将其剥离。有一个链接器标志 -ObjC 可以禁用此功能。

整理标题更具挑战性。框架对头文件的组织方式有自己的看法,这通常与 UNIX 传统不一致(这似乎是你所拥有的)。关键问题是您的客户端代码如何使用这些 header 。如果客户端代码执行以下操作:

#include <lib_1/----1.h>  

您必须在磁盘上保留该布局,并且在使用框架时没有明显的方法可以做到这一点。 OTOH,如果您可以控制客户端代码,并且可以将其更改为仅执行此操作:

#include <MyFramework/MyFramework.h>  

您可以在您的框架中创建一个伞形 header ,让它包含所有公共(public) header ,然后就可以了。

此答案复制自 Apple 开发者论坛。

关于ios - 如何组合胖静态库以在 iOS 应用程序中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56432789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com