动态库和静态库

2021-02-26  本文已影响0人  MeteorCode

一、库的概念

库(Library)

什么时候会用到库?

Link 的方式有两种:
静态
动态

库文件

. tbd
.framework
.dylib  //已被. tbd取代
.a   //纯二进制文件
.framework  //二进制文件 + 资源文件
.a和.framework的区别

静态库 static

动态库 dynamic

二、 framework概念

framework种类:

1- Dynamic Framework

2- Static Framework

3- Embedded Framework

三、创建framework

1)创建Framework模板


模板

1- 创建Static Framework

1.2)创建好后,展示的目录


项目目录

1.3)修改库类型

1.4)创建同名类


创建同名类
//StaticFramework.h
#import <Foundation/Foundation.h>
@interface StaticFramework: NSObject
- (void)log; //暴露给外部使用
@end

//StaticFramework.m
#import "StaticFramework.h"
@implementation StaticFramework
- (void)log {
    NSLog(@"Hello Static Framework!");
}
@end

1.5)用tree工具查看目录

.
└── StaticFramework.framework
    ├── Headers
    │   └── StaticFramework.h
    ├── Info.plist
    ├── Modules
    │   └── module.modulemap
    ├── StaticFramework
    └── _CodeSignature
        ├── CodeDirectory
        ├── CodeRequirements
        ├── CodeRequirements-1
        ├── CodeResources
        └── CodeSignature

4 directories, 9 files

2- 创建Embedded Framework

2.2)创建好后,展示的目录


项目目录

2.3)修改库类型

2.4)创建同名类


创建同名类
//EmbeddedFramework.h
#import <Foundation/Foundation.h>
@interface EmbeddedFramework: NSObject
- (void)log; //暴露给外部使用
@end

//EmbeddedFramework.m
#import "EmbeddedFramework.h"
@implementation EmbeddedFramework
- (void)log {
    NSLog(@"Hello Embedded Framework!");
}
@end

2.5)用tree工具查看目录

.
└── EmbeddedFramework.framework
    ├── EmbeddedFramework
    ├── Headers
    │   └── EmbeddedFramework.h
    ├── Info.plist
    ├── Modules
    │   └── module.modulemap
    └── _CodeSignature
        └── CodeResources

4 directories, 5 files

附上tree工具:树形目录图tree

四、使用Framework

//导入头文件
#import "ViewController.h"
#import <StaticFramework/StaticFramework.h>
#import <EmbeddedFramework/EmbeddedFramework.h>

@interface ViewController ()
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    [[StaticFramework new] log];
    [[EmbeddedFramework new] log];
}
@end
//项目打印
2021-02-25 18:02:46.795063+0800 FrameworkDemo[58597:1603602] Hello Static Framework!
2021-02-25 18:02:46.795842+0800 FrameworkDemo[58597:1603602] Hello Embedded Framework!
Reason: image not found

五、Embed&Sign

Do Not Embed
Embed&Sign
Embed Without Signing
1- Embed
//进入库目录下,终端执行
file  EmbeddedFramework.framework/EmbeddedFramework

打印结果:

//静态库
StaticFramework: current ar archive random library
//动态库
EmbeddedFramework: Mach-O 64-bit dynamically linked shared library x86_64
2- Sign
//进入库目录下,终端执行
codesign -dv EmbeddedFramework.framework
上一篇 下一篇

猜你喜欢

热点阅读