framework静态库 - ShenYj/ShenYj.github.io GitHub Wiki
既然
.a
是.o
的集合,.framework
是.a
的包装, 那么说明.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是用来准备生成
- 补充
-
新建一个文件夹, 命名为
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)
-