framework静态库
优质
小牛编辑
124浏览
2023-12-01
Framework静态库
既然
.a
是.o
的集合,.framework
是.a
的包装, 那么说明.a
就是.framework
的核心
探究: 手动将.a
包装成一个Framework
静态库
一、准备
在
OCStaticLib
文件夹下准备libOCTest.a
静态库. ├── OCTest.h ├── OCTest.m ├── OCTest.o └── libOCTest.a
完整的文件目录结构
. ├── Frameworks (用来存放一会生成的`Framework`静态库) ├── OCStaticLib │ ├── OCTest.h │ ├── OCTest.m │ ├── OCTest.o │ └── libOCTest.a └── test.m
- 补充
- OCStaticLib是用来准备生成
libOCTest.a
的, 示例会利用一个.a
手动创建成Framework
静态库 test.m
用来验证Framework
是否创建成功Frameworks
路径用来存放静态库, 在链接成直接文件时, 指定路径这一项更直观
- OCStaticLib是用来准备生成
- 补充
二、将.a
手动包装成Framework
静态库
- 新建一个文件夹, 命名为
OCTest.framework
- 在
OCTest.framework
中新建子文件夹Headers
- 将上面的
OCTest.h
复制到Headers
中 将上面的
libOCTest.a
复制到OCTest.framework
中目录结构
. ├── Headers │ └── OCTest.h └── libOCTest.a
去掉
.a
后缀去掉
lib
前缀最后
OCTest.framework
目录结构. ├── Headers │ └── OCTest.h └── OCTest.a
三、验证
利用外层的
test.m
链接Framework
静态库, 生成.o
目标文件clang -x objective-c \ -target x86_64-apple-macos11.1 \ -fobjc-arc \ -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk \ -I./Frameworks/OCTest.framework/Headers \ -c test.m \ -o test.o
链接
Framework
静态库生成执行文件clang -target x86_64-apple-macos11.1 \ -fobjc-arc \ -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk \ -F./Frameworks \ -framework OCTest \ test.o -o test
lldb
下运行可执行文件进入
lldb
环境lldb
包装成
target
(lldb) file test Current executable set to '/Users/shenyj/Documents/CodeForTest/lib/staticFramework/test' (x86_64).
运行
target
(lldb) r Process 58403 launched: '/Users/shenyj/Documents/CodeForTest/lib/staticFramework/test' (x86_64) 2021-01-25 16:49:54.145561+0800 test[58403:1826528] __TestExample 2021-01-25 16:49:54.145836+0800 test[58403:1826528] testApp ------ Process 58403 exited with status = 0 (0x00000000)