(一〇二)静态库(.a)的打包
来源:互联网 发布:三星高通9008端口救砖 编辑:程序博客网 时间:2024/06/16 22:09
库是代码的集合,根据代码公开程度,分为开源库和闭源库。
其中闭源库主要包括静态库和动态库,是经过编译的二进制文件,看不到具体实现。
静态库的拓展名是.a或者.framework,动态库则是.dylib和.framework。
静态库在链接时会将库完整的复制到可执行文件中,被多次使用就有冗余拷贝。
动态库在链接时不复制,程序运行时系统会动态的加载,多个程序共享一个动态库,节省内存。
注意:项目中如果包含自制的动态库,上传到App Store会被拒绝,如果要上传App,应选择静态库。
静态库用于抽取核心代码来供给其他项目使用。
静态库的应用:MRC库(例如cocos2d-iphone)用于ARC项目,可以将MRC库打包成静态库。
下面以一个简单的例子来讲解创建静态库的过程。
这个例子实现一个类方法,用于获取一张图片。
①新建一个静态库项目:
②新建一个类,类中通过类方法实现读取一张图片。
需要注意的是,为了防止别人使用静态库时资源与库本身资源冲突,常把库的资源放到一个Bundle中,方法为新建文件夹,改名为拓展名为.bundle,右键显示包内容,放入资源即可,如下图创建了SGTool.bundle,放了一张用于获取的图片。
类的声明和实现如下,注意获取bundle中图片的方法:
//// SGTool.h// staticDemo//// Created by 11 on 8/2/15.// Copyright (c) 2015 soulghost. All rights reserved.//#import <Foundation/Foundation.h>#import <UIKit/UIKit.h>@interface SGTool : NSObject+ (UIImage*)getImage;@end
//// SGTool.m// staticDemo//// Created by 11 on 8/2/15.// Copyright (c) 2015 soulghost. All rights reserved.//#import "SGTool.h"@implementation SGTool+ (UIImage *)getImage{ NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"button.png" ofType:nil inDirectory:@"SGTool.bundle"]; return [UIImage imageWithContentsOfFile:imagePath]; }@end③点击工程配置的Build Phases,在Copy Files中加入打包时暴露的头文件,这些文件用于使用者调用方法和查看静态库内容,但.m不会暴露。
④在真机和模拟器下各编译一次工程,然后在Products文件夹下对.a文件点击右键选择Show in Finder,可以看到有用于真机和模拟器的静态库。
只需要导入其中的.a和include,然后把bundle也拖入工程,即可使用该静态库,一般把这三个文件打包命名为lib,如下图:
⑤因为真机和模拟器架构不同,真机一般是arm7、arm64,而模拟器是x86,因此静态库不同,为了能够制作二者都能使用的静态库,使用lipo命令合并静态库。
发布时请使用真机静态库。
lipo -create <file1.a> <file2.a> -output <mixfile.a>
lipo -create Debug-iphoneos/libstaticDemo.a Debug-iphonesimulator/libstaticDemo.a -output SGTool.a
此外,使用lipo -info <file.a>可以查看静态库支持的架构。
⑥区分Debug和Release的静态库:
默认是Debug,会有完整的符号信息方便调试,不会进行代码优化。
可更改为Release,会进行代码优化,不包含完整的符号信息,执行速度略有提高。
更改方法如下图所示:
- (一〇二)静态库(.a)的打包
- 打包.a静态库
- 打包静态库.a
- .a静态库打包
- (一〇三)静态库(.a)的调试
- 108 打包.a静态库
- 打包静态库.a文件
- 手动打包.a静态库
- iOS 静态库a文件的打包 上
- iOS 静态库a文件的打包 中
- iOS 静态库a文件的打包 下
- iOS开发:打包.a静态库文件的步骤
- 打包静态库.a文件的方法(ar,ranlib,nm命令介绍)
- iOS 打包静态库.a文件
- iOS打包成.a静态库
- 【iOS开发】打包静态库.a文件
- 【iOS开发】打包静态库.a文件
- 【iOS开发】打包静态库.a文件
- 反射invoke方法之我见
- 九度oj 1017
- 美轮美奂宇宙星空制作神器Spacescape
- UVa 10913 - Walking on a Grid(dp递推变形)
- Android Studio——Gradle 版本回退
- (一〇二)静态库(.a)的打包
- 20150802-集合
- Socket通信之客户端和服务器对话
- 在 Linux 下安装基于 Python 的机器学习编程环境
- 使用WebRTC搭建前端视频聊天室-01——入门篇
- 举一反三的学习编程语言里的各个语法
- ContentReolver之打电话记录
- action的结果处理器
- linux系统函数ptrace介绍-01