美文网首页
静态库和动态库

静态库和动态库

作者: 宙斯YY | 来源:发表于2018-07-17 17:11 被阅读12次

一.基础概念

1.从开源角度讲,常见库的种类可以分为开源库和闭源库,iOS中静态库和动态库都属于闭源库,常见的AFN,MJExtension属于开源库。
2.静态库和动态库的文件后缀
  • 静态库:以.a 和 .framework为文件后缀名。
  • 动态库:以.tbd(之前叫.dylib) 和 .framework 为文件后缀名。
3.静态库和动态库的区别
  • 静态库:链接时会被完整的复制到可执行文件中,被多次使用就有多份拷贝。
  • 动态库:链接时不复制,程序运行时由系统动态加载到内存,系统只加载一次,多个程序共用(如系统的UIKit.framework等),节省内存。
4.iOS设备架构
  • 模拟器:
    iPhone4s-iPnone5:i386
    iPhone5s-:x86_64
  • 真机设备
    iPhone3gs-iPhone4s:armv7
    iPhone5-iPhone5c:armv7s
    iPhone5s-:arm64

二.静态库打包

.a静态库文件打包
1.创建文件
1.png

此时.a文件是红色状态


2.png
2.创建新文件之后,把头文件暴露给外部使用
3.png
3.修改配置文件并编译

我们需要把Build Active Architecture Only修改为NO,否则生成的静态库就只支持当前选择设备的架构。


4.png

我们分别选择Generic iOS Device和任意一个模拟器各编译一次,编译完后,我们会看到工程中Products文件夹下的libTest.a由红色变成了黑色,然后show in finder,看看生成的文件。


5.png
此时生成Debug-iphoneos/libTools.a和Debug-iphonesimulator/libTools.a两个.a文件,一个是模拟器架构下使用的,一个是真机架构环境下使用的。但都是Debug版本的。
如果想使用Release版本的:
6.png

选择Release并且再次编译。(Release版本比Debug版本运行速度更快,更轻量级)

4.验证.a文件支持的架构环境并合并
  • 验证:lipo -info 静态库名字
    验证静态库支持的架构
  • 合并:lipo -create 第一个.a文件的绝对路径 第二个.a文件的绝对路径 -output 最终的.a文件路径
    把模拟器环境和真机环境的.a文件合并成一个.a文件
    8.png

把.a文件和头文件集添加进入项目就可以使用。

5.打包前调试

因为静态库只能编译,那么我们如何调试代码呢?
A.新建一个普通工程
B.添加一个.a静态库的TARGETS(配置和编译步骤同上)-图1
C.主工程TARGETS关联静态库-图2、3


1.png

D.引入头文件进行调试


1.png

.framework静态库文件打包

1.创建文件
1.png

此时.framework文件是红色状态


2.png
2.创建新文件后,把头文件暴露给外部使用
3.png
3.修改配置文件并编译

我们需要把Build Active Architecture Only修改为NO,否则生成的静态库就只支持当前选择设备的架构。


4.png

我们分别选择Generic iOS Device和任意一个模拟器各编译一次,编译完后,我们会看到工程中Products文件夹下的TestFramework.framework由红色变成了黑色。
把Mach-O文件修改为静态库类型(因为.framework类型可为动态库也可为静态库)


5.png
此时生成Debug-iphoneos/TestFramework.framework和Debug-iphonesimulator/TestFramework.framework两个.framework文件,一个是模拟器架构下使用的,一个是真机架构环境下使用的。但都是Debug版本的。
如果想使用Release版本的:
6.png

选择Release并且再次编译。(Release版本比Debug版本运行速度更快,更轻量级)

4.验证.a文件支持的架构环境并合并
  • 验证:lipo -info 静态库名字
    验证静态库支持的架构
  • 合并:lipo -create 第一个.a文件的绝对路径 第二个.a文件的绝对路径 -output 最终的.a文件路径
    eg:lipo -create /Users/zhousiyang/Desktop/liba/ToolFramework.framework/ToolFramework /Users/zhousiyang/Desktop/liba/ToolFramework2.framework/ToolFramework -output /Users/zhousiyang/Desktop/liba/final
    把模拟器环境和真机环境的.framework文件合并成一个.framework文件
    6.png
    替换任意一个内部的.framework文件然后导出使用
5.打包前调试(同.a文件)
6.静态库.a和.framework的区别

.a文件只是单纯的二进制文件(代码),而.framework可以包含资源文件(图片音视频-建议使用Bundle包装避免和外部重名)。

相关文章

  • iOS 静态库和动态库的制作

    静态库和动态库 一、静态库和动态库的存在形式 静态库: .a 和 .framework 动态库: .dylib 和...

  • 静态库和动态库

    静态库和动态库的存在形式静态库:.a 和 .framework动态库:.dylib 和 .framework 静态...

  • Swift 静态库调研

    一、关于库的背景知识1、静态库和动态库静态库动态库系统动态库Cocoa Touch Framework静态库 v....

  • iOS 静态库封装

    静态库和动态库 静态库和动态库存在形式 静态库:以.a 和 .framework为文件后缀名。 动态库:以.tbd...

  • iOS-SDK从无到有

    A、关于静态库和动态库 静态库:.a和.framework ,动态库:.dylib和.framework。.fra...

  • 自定义三方SDK静态库、.framework

    静态库和动态库的存在形式 静态库: .a 和 .framework动态库: .dylib 和 .framework...

  • iOS静态库与动态库

    静态库与动态库 存在形式: ①静态库:.a 和 .framework②动态库:.dylib 和 .framewor...

  • 学习笔试--静态库和动态库

    静态库和动态库的存在形式 静态库:.a和.framework 动态库:.dylib和.framework 创建自己...

  • iOS开发-----静态库.a的制作教程

    (1)静态库和动态库的存在形式 静态库:.a和.framework 动态库: .dylib 和 .framewor...

  • 打包SDK和Framework

    库:分为动态库和静态库(目前苹果不支持上传动态库) 静态库:.a和.framework 动态库:.dylib和.f...

网友评论

      本文标题:静态库和动态库

      本文链接:https://www.haomeiwen.com/subject/aejgpftx.html