使用.a静态库 - ShenYj/ShenYj.github.io GitHub Wiki

使用.a静态库

ar生成.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静态库被链接到可执行文件中并成功使用了

⚠️ **GitHub.com Fallback** ⚠️