OC高级强化04:静态库和动态库

张建 lol

常见的库文件格式

  • .a 静态库
  • .dylib 传统意义的动态库
  • .framework 可静态库也可动态库
  • .xcframework 2018年推出的针对不同架构的库

什么是库?

库(Library)说白了就是一段编译好的而进行代码,加上头文件就可以供别人使用

什么时候会用到库?

  • 某些代码需要给别人使用,但是我们不希望别人看到源码,就需要咦库的形式进行封装,只暴露出头文件
  • 对于某些不会进行大的改动的代码,我们想减少编译的时间,就可以把它打包成库,因为库是已经编译好的二进制了,编译的时候只需要 Link 一下,不会浪费编译时间。

什么是链接?

库在使用的时候需要链接(Link),链接的方式有两种:

  • 静态

  • 动态

.a静态库

.o 文件的合集

.dylib动态库

.a 静态库 链接 之后的产物,即最终链接产物

什么是tdb格式

tdb全程是text-based stub libraries,本质上就是一个YAML描述的文本文件。

他的作用是用于记录动态库的一些信息,包括导出的符号、动态库的架构信息、动态库的依赖信息

用于避免在真机开发过程中直接使用传统的dylib。

对于真机来说,由于动态库都是在设备上,在xcode上使用基于tbd格式的伪framework可以打打减少xcode的大小

@rpath

Runpath search Paths

dylib 搜索路径

运行时 ‘@rpath’ 指示 ‘dylib’ 按顺序搜索路径列表,以找到动态库,‘@rpath’ 保存一个活多个路径变量

@rpath 谁链接我,谁给我提供rpath

@executable_path:表示可执行程序所在你的目录,解析为可执行文件的绝对路径

@loader_path:表示被加载的Mach-O所在的目录,每次加载时,都可能被设置为不同的路径,由上层指定

  • Post title:OC高级强化04:静态库和动态库
  • Post author:张建
  • Create time:2022-01-07 15:52:13
  • Post link:https://redefine.ohevan.com/2022/01/07/OC底层原理/OC高级强化04:ZJBlog 2/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.