ios开发之静态库(.a)的生成及使用

来源:互联网 发布:项目经验怎么写 知乎 编辑:程序博客网 时间:2024/05/17 05:15

一、静态库定义:

        在应用中,有些公共的代码需要反复使用 的代码,希望隐藏代码的具体实现,可以把这部分代码做出静态库(.a文件);如果提供库的源代码称为开源库(能看见.h也能看见.m文件),不提供源代码的库称为闭源库(静态库,动态库)

二、静态库的特点:

      ios在代码执行过程中的各种文件:.c文件(源代码) .o文件(编译产生的文件) .exe文件(可执行文件);静态库链接时会将库文件完整的拷贝到可执行程序,若多个程序使用到静态库,每个文件都会讲此静态库文件拷贝一份。而动态库不会将库都拷贝到用到此库的文件中,而只会将此动态库的标签传到每一个使用此库的文件中(此标签只告诉了此库的地址)链接时会将库文件完整的拷贝到可执行程序。多个程序使用到动态库,都会引用这个动态库资源的地址。注:链接即为将.o文件转变为.exe文件的过程

三、静态库(.a)文件的生成:

      ios静态库的体现是.framework文件及.a文件两种。

      1.创建静态库工程:

    

  2.刚创建的静态库的.a工程如下:

  

并在.h文件声明方法,在.m中实现该方法。

3.创建真机的静态库文件:

选中通用设备 编译 静态库由红色变为黑色  文件夹中只有.h(其实.m也进去了) 通过选中target—BuildPhase—-Compile Source 查看.m文件  在Copy Files 中查看.h文件


4.通过选中变黑的静态库文件,show in finder 查看如下:


libcreateStaticLib.a即为生成的静态库文件,因为编译时选择的是通用设备所以此静态库存在于 Debug-iphoneos文件夹下。将此文件夹复制出来待用。

5.创建模拟器的静态库文件:

先将上步生成的真机的静态库删除,再生成模拟器的静调库文件。防止受上步生成的静态库文件的影响。选中任一模拟器,编译即可生成。

6.show in finder查看,如下:


因为是模拟器的静态库故放在Debug-iphonesimulator文件夹下,将此文件夹拷贝出来与上边的模拟器的文件夹放在同一文件夹下待用(方便真机与模拟器的静态库合并)

7.使用静态库:

真机:将真机版的静态库文件.a 及.h文件导入到目标工程中,通过静态库的.h文件调用方法即可。

模拟器静态库的使用方法同真机。

注意:模拟器的静态库文件只能用于模拟器,而真机的静态库只能用于真机,错误使用会崩溃,如果模拟器的静态库放在真机上运行或真机的静态库放在模拟器上运行,都会产生如下错误:


未找到createStaticLib类。

8.合并静态库:

为了避免上述错误,最好将模拟器的静态库与真机的静态库合并,防止在模拟器与真机切换时,还需要更换静态库的麻烦事。

合并方法如下:

将Debug-iphoneos与Debug-iphonesimulator文件放在同一文件夹下,使用终端 切换至此目录下,执行终端的ls命令,确保此目录下只有这两个Debug开头静态库文件夹,然后执行如下终端命令:lipo -create Debug-iphoneos/libCreateStaticLib.a  Debug-iphonesimulator/libCreateStaticLib.a  -output mylib.a

此时,会在与两个Debug文件并列的位置产生名为mylib.a的静态库文件,此文件通用于真机及模拟器。


0 0