美文网首页iOS Developer
iOS最新静态库的创建与使用

iOS最新静态库的创建与使用

作者: Tank丶Farmer | 来源:发表于2017-07-27 18:15 被阅读0次

    引言

    静态库即静态链接库,之所以叫做静态,是因为静态库在编译的时候会被直接拷贝一份,复制到目标程序里,这段代码在目标程序里就不会再改变了.静态库的好处很明显,编译完成之后,库文件实际上就没有作用了.目标程序没有外部依赖,直接就可以运行.当然其缺点也很明显,就是会使用目标程序的体积增大.
    我们可能熟识静态库但可能并未自己创建并使用,下面我将向大家讲解如何创建并使用静态库.

    静态库的创建

    首先我们准备好需要打包的文件,在这里我以 FMDB 第三方库为例,来给大家讲解静态库的打包.

    1.创建新的项目

    创建.png

    之后选择


    选择库.png

    创建完成之后我们将第三方库导入如下图

    导入 FMDB 第三方库.png

    2.设置暴露的头文件

    点击TARGETS ~> Build Phases 点击添加New Headers Phase

    image.png

    导入 FMDB.h 即可,我导入其他的有点多余,不过无伤大雅.咱们继续.

    3.设置打包的类型

    选择工具栏的 Product ~> Schemes,进入选择 Release 选项,如果想打测试包可以选择 Debug

    选择打包类型.png

    都设置成功之后,然后我们用真机运行一下就 OK 啦,运行完之后.a静态库就打包成功

    image.png
    我们点击 show in finder即可找到相应的库.
    在此我们需要将 libStaticLibrary.a 改为- lStaticLibrary.a .(打包结束系统会自动为我们的加上 lib 字段)
    注:打包静态库时如果用的真机,则静态包只能真机运行,如果模拟器运行则只能用于模拟器运行,如果想实现两通用就要先打两个包然后通过
    lipo –create Release-iphoneos/libStaticLibrary.a Release-iphonesimulator/libStaticLibrary.a –output libsqlcipher.a即可实现整合

    将下面文件夹复制到想要用的目录里即可

    image.png

    OK 我们的静态库就这样打包成功了!!!!!

    静态库的使用

    工具都准备好了,让我们应用到实际项目中吧.

    1.配置文件路径

    首先配置文件的路径,将静态库拖入项目中如下图所示

    将静态库拖入项目.png

    然后在相应位置导入.a库以及相应的FMDB.h 文件

    2.设置Library Search Path

    需要添加以下参数:

       $(SRCROOT)/Libs/Debug-iphonesimulator$(EFFECTIVE_PLATFORM_NAME) 
       $(SRCROOT)/Libs/Release-iphonesimulator$(EFFECTIVE_PLATFORM_NAME)
    

    $(SRCROOT):表示当前工程的根路径,可以在右边看到实际对应的路径
    $(EFFECTIVE_PLATFORM_NAME):代表当前配置是OS,如果是模拟器则为-iphonesimulator,真机则为-iphoneos
    一般第三方库只提供Release版本,如果只有Release版,则两个都设置Release即可

    image.png

    3.设置编译参数

    Build Settings ~> Linking ~> Other Linker Flags

    -all_load:会让链接器把所有找到的目标文件都加载到可执行文件中,但是千万不要随便使用这个参数!假如你使用了不止一个静态库文件,然后又使用了这个参数,那么你很有可能会遇到ld: duplicate symbol错误,因为不同的库文件里面可能会有相同的目标文件,所以建议在遇到-ObjC失效的情况下使用-force_load参数。
    -force_load:所做的事情跟-all_load其实是一样的,但是-force_load需要指定要进行全部加载的库文件的路径,这样的话,你就只是完全加载了一个库文件,不影响其余库文件的按需加载  
    
    image.png

    导入相应头文件即可直接调用

    image.png

    在运行时,遇到了.o报错

    image.png

    几经周折,终于找到了原因少了 sqlite3库,添加完之后直接运行.OK搞定,一切都是那么的完美

    image.png

    好久没有写东西了,最近不太忙,看了一些第三方的内部实现,看的不是怎么透彻,有时间跟大家分享一家,不足之处请多多批评指教,谢谢大家.
    Tank

    相关文章

      网友评论

        本文标题:iOS最新静态库的创建与使用

        本文链接:https://www.haomeiwen.com/subject/ocxtlxtx.html