练习创建Framework 以及链接Framework

768 阅读2分钟

当我们查看有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
 */

  • 查看结果是成功的