iOS 生成静态文件(以及一些错误)

来源:互联网 发布:百度云软件打不开 编辑:程序博客网 时间:2024/06/12 22:50

1.创建工程,系统自己会生成2个NSObject的类:可以随意添加或删除。

2.选择是生成模拟器的.a文件还是真机的.a文件

(1)模拟器.a文件配置如下


(2)真机配置如下:

注意:这里的Bulid Active Architecture Only必须设置为NO,因为设置为NO的话。。他会编译成支持多种arm的静态库;

具体可以使用终端命令查询:lipo -info /文件路径.....可以查看类型。如果产生了下面这样的错误说明你没设置为NO。

Undefined symbols for architecture armv7s:
  "_OBJC_CLASS_$_XXXX", referenced from:
      objc-class-ref in   xxxxx.a(xxxxx.o)
   ld: symbol(s) not found for architecture armv7s


3.在.a工程类需要将Other Linker Flags设置成-ObjC,在引入.a文件的工程需要将Other Linker Flags设置成-all_Load

-all_load就是会加载静态库文件中的所有成员,-ObjC就是会加载静态库文件中实现一个类或者分类的所有成员,-force_load(包的路径)就是会加载指定路径的静态库文件中的所有成员。所以对于使用runtime时候的反射调用的方法应该使用这三个中的一个进行link,以保证所有的类都可以加载到内存中供程序动态调用.

4.在类里面随便写个方法。然后RUN一下生成各自的.a文件

5.将2个.a文件合并成一个。

具体如下:

lipo -create SQY/iOS/iphoneos/libGamePlusAPI.a SQY/iOS/iphonesimulator/libGamePlusAPI.a  -output SQY/iOS/libGamePus.a

注意:上面的方法要注意空格,不然会失败。

6.将生成的.a和头文件导入工程里面,看是否可以调用头文件的方法:可以就是成功


错误总结:

1.***Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[NSDictionary dictionaryWithJSONString:error:]: unrecognized selector sent to class 0x235e7ec'

unrecognized selector sent to class 0x235e7ec'

一般是由于没有添加-all_Load。导致无法引入类

2.duplicate symbols for architecture armv7

这是由于静态库里面包含的一些全局定量或者一些类与你工程里的一样的名字。一般来说添加公司或个人名字的前缀来区分。




0 0
原创粉丝点击