使用类库的关键 - ShenYj/ShenYj.github.io GitHub Wiki
-
静态库
通过探索 静态库 得知使用类库的三要素:
- 头文件路径
- 库文件路径
- 库文件名称
// 1. -I: 头文件 HEADER_SEARCH_PATHS = $(inherited) "${SRCROOT}/AFNetworking" "${SRCROOT}/AFNetworking2" // 2. -L: library 所在目录 LIBRARY_SEARCH_PATHS = $(inherited) "${SRCROOT}/AFNetworking" "${SRCROOT}/AFNetworking2" // 3. -l 名称 OTHER_LDFLAGS = $(inherited) -l "AFNetworking" -l "AFNetworking2"
-
动态库
通过探索 动态库 得知使用动态库的基本四要素:
- 头文件路径
- 库文件路径
- 库文件名称
- 配置 run path
// 1. -I: 头文件 HEADER_SEARCH_PATHS = $(inherited) ${SRCROOT}/DashLine.framework/Headers // 2. -F: framework 所在目录 FRAMEWORK_SEARCH_PATHS = $(inherited) ${SRCROOT} // 3. framework 名称 OTHER_LDFLAGS = $(inherited) -framework "DashLine" // 4. 动态库的路径 LD_RUNPATH_SEARCH_PATHS = $(inherited) ${SRCROOT}
对于静态库和动态库, clang
对应的参数略微不同, 在不考虑弱引用等复杂实现的场景下, 想要保证一个动态库或静态库的正常使用,这些配置必不可少
-
clang
关键参数说明-x: 指定编译文件语言类型 -target: 指定指令集(-target arm64-apple-ios14.3 真机) -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) 4. -F<directory> 在指定目录寻找framework (framework search path) 5. -framework <framework_name> 指定链接的framework名称 (other link flags -framework AFNetworking)