- 静态库工程建立
打开xcode --> 新建工程 --> 选择工程类型为library --> 确定
2.工程配置
点击工程中-->ios device(选择edit scheme) --> 点击info --> run (选择release 或者debug)--> ok
target --> building setting --> archciture active only 设置为no
编译运行--> xcode 的product 中点击菜单--> show in finder 找到编译的静态库。
3. 注意事项
静态库一般分为模拟器和真机两种
模拟器是i386架构,真机是你当前打包时候使用的手机的架构
iPhone 手机cpu 架构类型
armv6 :iphone iphone2 iphone3G
armv7 :iphone3Gs iphone4 iphone4s
armv7s :iphone5 iphone5c
arm64 :iphone5s iphone6 iphone6p iphone6s iphone6sp
4.查看lib库的信息
命令是:lipo -info libPrint.a,可以看到显示的结果是:Arch是 Arm7。下面我会具体介绍一下。
5.有时候可以看到undefine symbols for architecture i386这样的错误。
其实这个错误原因很简单,就是因为,我们用错了编译出来的xxx.a lib;在模拟器里面,我们需要的是基于i386构架编译的static lib,但是这个a文件,大家还记得前面说的arm6 arm7构架的么。这个a其实是在iphone这个arm构架上运行的代码。其实show in finder指向的是一个ios device的库,并不是i386模拟器下的库。那如何编译i386的库呢?我们将这个iOS Device修改成iPhone5.0 Simulator。在进行编译,这样就可以编译出i386下面的库。这个时候我们show in finder打开的文件夹还是ios device下的库。我们最好自己去那个目录下看一下。这里我们用command去查看了一下目录情况,如下:可以看到一个iphoneos的目录和一个simulator的目录。
然后我们再看看这个目录与第4条所示的目录有什么不同! 同样也有一个libPrint.a文件。
6.lib 错误原因,
Release-iphoneos里面的是基于arm6 arm7编译出来的库文件。Release-iphonesimulator文件夹下面的是基于i386编译出来的文件。
7.合并.a文件,制作通用静态库
这二个库一个是用于真机运行的一个是用于模拟器运行的.其实我们可以利用lipo将这二个文件打包成一个通用的a文件。命令如下:
将/Users/user/Library/Developer/Xcode/DerivedData/UITab-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products替换成你的路径。
将/Users/user/Desktop/xxx.a替换成合并后的路径。
lipo -create path1/真机/xxxt.a path2/模拟器/xxx.a -output /Users/pjk1129/Desktop/xxx.a