首先明确一下几个概念

从iOS8/Xcode6开始,苹果允许使用动态库链接
通过cocoapods管理应用程序时,在Podfile文件中,**use_frameworks!**的使用区别如下:

  • 使用**use_frameworks!**时dynamic frameworks 方式 -> .framework
cocoapods会生成对应的 frameworks 文件
在Link Binary With Libraries:会生成Pods_工程名.framework,包含了其它用cocoapods导入的第三方框架的.framework文件

  • 不使用**use_frameworks!**时static libraries 方式 -> 生成.a文件
cocoapods会生成相应的 .a文件(静态链接库)
Link Binary With Libraries: libPods-工程名.a 包含了其他用cocoapods导入有第三库的 .a 文件

1、纯OC项目中,通过cocoapods导入OC库时,一般都不使用use_frameworks!
2、纯swift项目中,通过cocoapods导入swift库时,必须使用use_frameworks!
3、只要是通过cocoapods导入swift库时,都必须使用use_frameworks!
4、使用动态链接库dynamic frameworks时,必须使用use_frameworks!

系统提供的库都是 dylib 动态库

什么是 tbd?“text-based stud libraries”的缩写,Xcode7开始引入的技术,为了减少Xcode中相应的SDK的体积,实际上是一个文本。

--- !tapi-tbd-v3
archs:           [ armv7, armv7s, arm64 ]
uuids:           [ 'armv7: DEA2F438-8531-392F-85B1-73240DD2A2EC', 'armv7s: A50A77BF-6473-3BBB-B0D1-92E3240D79DC', 'arm64: E53F9393-BFC8-3EF5-8520-B0FE6B193183' ]
platform:        ios
install-name:    /System/Library/Frameworks/Foundation.framework/Foundation
current-version: 1452.23
compatibility-version: 300
objc-constraint: none
exports:         - archs:           [ armv7, armv7s ]symbols:         [ '$ld$add$os2.0$_OBJC_CLASS_$_NSURL', '$ld$add$os2.0$_OBJC_METACLASS_$_NSURL', '$ld$add$os2.1$_OBJC_CLASS_$_NSURL',

其中有支持的架构、二进制文件的位置以及库中所有 symbols 的声明,是动态库的一个描述。

Xcode动态库的路径:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks

Foundation.framework也是一个dylib动态库,可以看到目录下有同名的tbd以及Headers(包含开发的API头文件)

动态库是在程序运行的时候才加载的,在Xcode中导入这些 framework 以及tbd只是对动态库的一个描述,目前是为了告诉编译器动态库中有这些API,以便于成功编译,否则编译不通过,提示 “Symbol not found” 错误。

真正的动态库存放在哪里?

在Foundation.framework的tbd文件中,可以看到其动态库的存放路径在“/System/Library/Frameworks/Foundation.framework/Foundation”,但实际上在越狱设备上并不能找到对应的文件,其他的库也是一样。
**在iOS系统中,系统库文件都被打包到一个缓存的文件中,即 dyld 缓存,位于/System/Library/Caches/com.apple.dyld/目录下,文件名是以“dyld_shared_cache_”**开头,再加上这个动态库 dyld支持的指令集。

参考链接1
参考链接2

use_frameworks!的作用、静态库与动态库、tbd相关推荐

  1. iOS之深入解析静态库和动态库

    一.库 ① 什么是库? 库就是程序代码的集合,将 N 个文件组织起来,是共享程序代码的一种方式. 从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行. ② 库的分类 根据程序代码的开源情况 ...

  2. 静态库与动态库的区别

    静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用. 什么时候我们会用到库呢?一种情况是某些代码需要给别人使用,但是我们不希望别人 ...

  3. 静态库与动态库的区别(转)

    静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用. 什么时候我们会用到库呢?一种情况是某些代码需要给别人使用,但是我们不希望别人 ...

  4. C 语言编程 — 静态库、动态库和共享库

    目录 文章目录 目录 文章目录 程序函数库 静态链接 创建静态库文件 动态链接 创建共享库文件 共享库文件的名字 共享库文件的存储路径 LD_LIBRARY_PATH 环境变量 ldconfig 指令 ...

  5. Linux中gcc的编译、静态库和动态库的制作

    欢迎大家关注笔者,你的关注是我持续更博的最大动力 Linux中gcc的编译.静态库.动态库 文章目录: 1 gcc的编译过程 1.1 gcc的编译过程 1.2 gcc的常用参数 2 gcc 静态库的制 ...

  6. 【Android NDK 开发】Android.mk 配置静态库 ( Android Studio 配置静态库 | 配置动态库与静态库区别 | 动态库与静态库打包对比 )

    文章目录 I . Android Studio 中使用 Android.mk 配置静态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...

  7. Linux学习:静态库和动态库

    1.库是什么? 将"源代码"变为"二进制格式的源代码"(作用:加密,别人可以用,但不知道其中的内容). 2.库制作出来之后,如何给用户使用? 需要给用户:头文件 ...

  8. 关于VS2013下制作和使用静态库和动态库

    关于VS2013下制作和使用静态库和动态库 引言 什么是库:库是写好的现有的,成熟的,可以复用的代码. 所谓静态.动态是指链接.将一个程序编译成可执行程序的步骤: 静态库在链接阶段,会将汇编生成的目标 ...

  9. 关于VS环境下制作和使用静态库和动态库

    转载理由:虽然操作什么的很基础,不过作为初学还是很好的文章,手把手教学 关于VS2013下制作和使用静态库和动态库 引言 什么是库:库是写好的现有的,成熟的,可以复用的代码. 所谓静态.动态是指链接. ...

  10. HelloWorld CMake Demo 03:CMake中构建静态库与动态库及其使用

    继续完善Hello World,建立它的共享库,包括静态库和动态库. 本节的任务: 1,建立一个静态库和动态库,提供HelloFunc函数供其他程序编程使用,HelloFunc向终端输出Hello W ...

最新文章

  1. 使用小技巧教你用Selenium获取鼠标指向的元素
  2. [开心]很搞笑的贴图,必看(收藏)
  3. sitecore系统教程之架构概述
  4. 吐血整理!近二十年全国数学联赛赛题大全,烧脑全集来啦!
  5. symfony api 错误响应_Postman for Mac(API管理开发软件)
  6. 动态载入树 (ASP+数据库)
  7. 输入输出流_内部存储·
  8. 集设分享最全字体帮合集,愿这些作品能给你带来灵感和启迪。
  9. Flutter代码锦囊---自定义曲线裁剪
  10. SQL Server 2008 Datetime Cast 成 Date 类型可以使用索引(转载)
  11. android调webview的方法,Android中的WebView详解
  12. eclipse java开发实例_eclipse+webservice开发实例
  13. python函数支持哪些参数类型_Python函数的几种参数类型
  14. c++树及树与二叉树的转换
  15. 系统学习NLP(二十七)--EMLo
  16. MyBatis框架的使用及源码分析(三) 配置篇 Configuration
  17. Bluetooth Profile Specification之(AVRCP篇)5.0 AVRCP简介
  18. <4>STM32F103基础知识
  19. oracle分门别类的统计列数据
  20. 微信小程序和微信小游戏的区别体现在哪?

热门文章

  1. Js获取点击元素的id
  2. 北京最新食品安全管理员考试真题题库及答案解析
  3. 高德/百度经纬度转换
  4. 一年级学机器人课程是编程课吗
  5. 页面嵌套iframe
  6. 基于Java毕业设计智慧养老院管理系统源码+系统+mysql+lw文档+部署软件
  7. html表格空格符是什么,HTML中的空格符号是什么
  8. 魅蓝E2上手评测:千元神机 续航怪兽
  9. 55从零开始学Java55之String字符串的编码
  10. python游戏目标识别_用Python玩GTA 5—使用OpenCV读取游戏面面