使用.a静态库
优质
小牛编辑
128浏览
2023-12-01
使用.a
静态库
利用这里制作的.a
静态库, 来链接使用这个.a
静态库, 并验证这一切是否如预期那样
同样的, 继续通过clang
直接操作, 更便于理解IDE
底层执行的过程
一、前期准备
- 准备了一个
test.m
文件, 用来链接.a
静态库并生成可执行文件, 观察运行结果 代码
#import <Foundation/Foundation.h> #import "OCTest.h" int main() { NSLog(@"testApp ------"); OCTest *lib = [OCTest new]; [lib test:nil]; return 0; }
文件目录
. ├── OCStaticLib │ ├── OCTest.h │ ├── OCTest.m │ └── libOCTest.a └── test.m
二、生成可执行文件
这里我准备了一个脚本, 用来编译、链接成最后的可执行文件
SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk # 链接libOCTest.a到test.m中生成.o文件 clang -x objective-c \ -target x86_64-apple-macos11.1 \ -fobjc-arc \ -isysroot $SYSROOT \ -I./OCStaticLib \ -c test.m \ -o test.o # 将.o生成执行文件 clang -target x86_64-apple-macos11.1 \ -fobjc-arc \ -isysroot $SYSROOT \ -L./OCStaticLib \ -lOCTest \ test.o -o test
- 参数说明
-I
:-I<directory>
在指定目录寻找头文件, 等同于Build Setting
设置header search path
-L
:-L<dir>
指定库文件路径(.a.dylib库文件, 等同于Build Setting
设置library search path
-l
:-l<library_name>
指定链接的库文件名称(.a.dylib库文件), 等同于Build Setting
设置other link flags -lAFNetworking
- 这三个参数中间都没有空格
- 参数说明
三、运行可执行文件
在终端中直接进入
lldb
环境来运行可执行文件: 终端lldb环境运行可执行文件输出结果
Process 35956 launched: '/Users/shenyj/Documents/CodeForTest/lib/staticOCLib/test' (x86_64) 2021-01-27 10:15:38.286564+0800 test[35956:728432] testApp ------ 2021-01-27 10:15:38.286928+0800 test[35956:728432] __TestExample Process 35956 exited with status = 0 (0x00000000)
没有任何报错, 并且手动创建的
.a
方法被执行, 说明这个.a
静态库被链接到可执行文件中并成功使用了