iOS动态库-静态库

1,797 阅读2分钟

ipa 中的Frameworks文件夹

这里的全部都是动态库

xcode项目中的库

target列表中的图标

image.png

  • 小圆圈:未在build settings中指明类型库
  • 小房子:build setting中指明是静态库
  • 公文包:

新建target时的动态、静态

Framework那个就是动态的 image.png

如何查看一个库是动态库,还是静态库

  • .a一定是静态库
  • . file 命令
file XXXXX
// 可能的结果
XXXXXX (for architecture arm64): current ar archive // 静态库
XXXXXX (for architecture arm64): ... dynamically linked shared library arm64 // 动态库

动态库和静态库的区别如下

格式区别

首先静态库和动态库都是以二进制提供代码复用的代码库

  • 静态库 常见的是 .a
  • 动态库常见的是 .dll(windows),.dylib(mac),so(linux)
  • framework(in Apple): Framework 是Cocoa/Cocoa Touch程序中使用的一种资源打包方式,可以将代码文件、头文件、资源文件、说明文档等集中在一起,方便开发者使用。也就是说我们的 framework其实是资源打包的方式,和静态库动态库的本质是没有关系的

组成区别

  • 静态库: 一堆目标文件(.o/.obj)的打包体(并非二进制文件)
  • 动态库: 一个没有main函数的可执行文件

使用区别

动态库静态库
命名空间有单独的命名空间,不同库同名文件不会冲突 使用import<XXX/xxx.h>的方式引入没有单独命名空间,同名文件冲突 引入方式import"xxx.h"
加载时机在启动时加载,加载时间较长构建时加载
依赖关系可以依赖动态库,不能依赖静态库可以依赖动态库和静态库
是否能使用swift可以包含swift文件在cocoapods1.4.0之后,可以使用use_framework!的方式包含swift文件 framework支持static_framework

编译链接区别

参考链接: