静态库

优质
小牛编辑
112浏览
2023-12-01

静态库

一、Mach-O下静态库的类型

  • .a

    • .o文件合集
    • 程序代码的集合,是共享程序代码的一种方式
  • .framwork

    • 苹果针对.a的一层包装
    • Mac OS/iOS平台, Framework实际上是一种打包方式, 将库的二进制文件、头文件和有关的资源文件打包到一起, 方便管理和分发.

      • Framework 可以通俗的理解为封装了共享资源的具有层次结构的文件夹。共享资源可以是 nib文件、国际化字符串文件、头文件、库文件等等。它同时也是个 Bundle,里面的内容可以通过 Bundle 相关 API 来访问。
        Framework 可以是 static frameworkdynamic framework。 在 iOS App 打包完成后,如果 Framework 包含了模拟器指令集(x86_64i386),那么用 Xcode 发布 App 的时候,会报 unsupported architectures 的错误,所以需要我们手动或脚本去移除。
      • Framework和系统的UIKit.Framework还是有很大区别的. 系统的Framework不需要拷贝到目标程序中, 我们自己做出来的Framework哪怕是动态的, 字后也还是要拷贝到App中(AppExtensionBundle是共享的), 因此苹果又把这种Framework成为Embedded Framework.
  • .xcframework

    • 2019年推出 优化不同架构的处理
    • XCFrameworkXCode11中提出的一个新特性,是由XCode创建的一个可分发的二进制包,它包含了 frameworklibrary 的一个或多个变体,因此可以在多个平台(iOSmacOStvOSwatchOS) 上使用,包括模拟器。XCFramework 可以是静态的,也可以是动态的。xcframework 的好处就是用 Xcode 发布的时候,Xcode 会自动选用正确的指令集 Frameworks,省去了手动移除动态库中的模拟器指令集的工作。

二、生成一个.a静态库

摆脱 xcode和任何相关原理方面的知识, 用最简单、直接、原始的方式先来创建一个.a静态库


三、使用一个.a静态库

链接使用 ar生成.a静态库 / libtool生成.a静态库 中手动创建的.a静态库

自制的.a过于简单, 接下来以AFN为例, 链接使用


四、静态库的探究

五、动态库