当我们查看有AFNetworking的项目查看项目结构会发现
- 1.有一个Frameworks文件夹存放项目各种的Framework
- 2.查看AFNetworking时会发现里面有Headers存放.h文件
- 3.AFNetworking一个可执行文件 所以我们构建一个模拟一下练习一下怎么创建Framework库,做一个简单的工程 练习使用的项目讲解是继续上一篇文章的 juejin.cn/post/692616…
创建文件
注意这里的名字要保持一致否则link
clang: error: linker command failed with exit code 1
这样其实就已经完成了一个静态的Framwork库
链接这个framwork
- 1.把test.m 编译成 .o 文件
clang -x objective-c
-c -fmodules
-target x86_64-apple-macos11.1
-fobjc-arc
-isysroot/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk
-I./Frameworks/TestFramework.framework/Headers
-c test.m -o test.o
- mudule 处理 .h 文件
- import "xxx.h"时 .h 文件参与编译
- clang mudule 将.h 文件 提前编译成二进制存放到系统的缓存中
- 注意这个 -I 命令要输入对的头文件路径
- 将test.o 编译成可执行文件
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 TestFramework \
test.o -o test
//TestExample 其实就是 TestFramework
/**
test.o链接TestExample.framework生成test可执行文件
-F./Frameworks 在当前目录的子目录Frameworks查找需要的库文件
-framework TestExample 链接的名称为TestExample.framework的动态库或者静态库
查找规则:先找TestExample.framework的动态库,找不到,再去找TestExample.framework的静态库,还找不到,就报错
*/
//这个很重要
/**
clang命令参数:
-x: 指定编译文件语言类型
-g: 生成调试信息
-c: 生成目标文件,只运行preprocess,compile,assemble,不链接
-o: 输出文件
-isysroot: 使用的SDK路径
1. -I<directory> 在指定目录寻找头文件 header search path
2. -L<dir> 指定库文件路径(.a\.dylib库文件) library search path
3. -l<library_name> 指定链接的库文件名称(.a\.dylib库文件)other link flags -lAFNetworking
-F<directory> 在指定目录寻找framework framework search path
-framework <framework_name> 指定链接的framework名称 other link flags -framework AFNetworking
*/
- 查看结果是成功的