(一〇二)静态库(.a)的打包
库是代码的集合,根据代码公开程度,分为开源库和闭源库。
其中闭源库主要包括静态库和动态库,是经过编译的二进制文件,看不到具体实现。
静态库的拓展名是.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)的打包的更多相关文章
- VC 静态库与动态库(二)静态库创建与使用
1.新建项目,创建项目和解决方案 StaticLibrary 这是静态库项目 G:\C++Learn\Library Library文件夹用于存放库相关文件,包含静态库与后面的动态库工程和解决方案 ...
- Android Studio 打包AAR和第三方静态库
需求 现在有一个第三方库libstatic_add.a和对应的头文件static.h,要求封装一个Module,该Module依赖这个静态库,要求打包的Module包含该静态库. 方案 创建Andro ...
- iOS : 静态库制作
一.静态库简介 1. 什么是库? 库 就是程序代码的集合, 是共享程序代码的一种方式 2. 库的分类? 开源库 公开源代码, 能看到具体实现 例如MJExtension, MJRefresh, AFN ...
- Windows下静态库与动态库的创建与使用
Windows下静态库与动态库的创建与使用 学习内容:本博客介绍了Windows下使用Visual C++ 6.0制作与使用静态库与动态库的方法. --------CONTENTS-------- 一 ...
- iOS 静态库的制作
按照公司的想法 要开发一款SDK,于是就抽空学习一下静态枯的制作过程. 在IOS中有静态库和动态库的区分,下面我们就来详细介绍一下. 一.静态库和动态库的详细介绍. 我们平时的工程中或多或少都要引入第 ...
- GCC 指令详解及动态库、静态库的使用
GCC 指令详解及动态库.静态库的使用 一.GCC 1.1 GCC 介绍 GCC 是 Linux 下的编译工具集,是「GNU Compiler Collection」的缩写,包含 gcc.g++ 等编 ...
- iOS开发中静态库制作 之.a静态库制作及使用篇
iOS开发中静态库之".a静态库"的制作及使用篇 一.库的简介 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的类型? 根据源代码的公开情况,库可以分为2种类 ...
- QT中静态库的生成与使用
一. 静态库的生成 1. 测试目录: lib 2. 源码文件名: mywindow.h, mywindow.cpp, 类MyWindow继承于QPushButton, 并将文字设置为&qu ...
- QT中静态库的生成与使用——创建共享库代码,附例子
一. 静态库的生成 1. 测试目录: lib 2. 源码文件名: mywindow.h, mywindow.cpp, 类MyWindow继承于QPushButton, 并将文字设置为&qu ...
随机推荐
- SpringCloud学习之feign
一.关于feigin feigin是一种模板化,声明式的http客户端,feign可以通过注解绑定到接口上来简化Http请求访问.当然我们也可以在创建Feign对象时定制自定义解码器(xml或者jso ...
- 【Tensorflow系列】使用Inception_resnet_v2训练自己的数据集并用Tensorboard监控
[写在前面] 用Tensorflow(TF)已实现好的卷积神经网络(CNN)模型来训练自己的数据集,验证目前较成熟模型在不同数据集上的准确度,如Inception_V3, VGG16,Inceptio ...
- strings.h 与 string.h 头文件的区别
今天使用 man string 来查看 string 文件的使用的方法(毕竟里面的函数名字和传入参数和发挥参数的类型,如果一段时间不使用,会产生遗忘.) 偶然发现,string.h 的man page ...
- jquery easyui datagrid设置行样式 不可删除某行
rowStyler: function (index,row) { if (parseInt(row.ksrs) > 0) { return 'color:red'; } }, onLoadSu ...
- SSM框架原理,作用及使用方法(非原创)
原帖:地址https://blog.csdn.net/bieleyang/article/details/77862042 如有侵权请联系删除 作用: SSM框架是spring MVC ,spring ...
- Python小代码_7_字符串的字符次数统计
生成包含 1000 个随机字符的字符串,并统计每个字符出现的次数. import string import random #获取字符 x = string.ascii_letters + strin ...
- sublime下配置C/C++运行环境
最近在学习<WEB前端课程>老师教我们使用DW,但是不太喜欢,就选择了sublime,写前端代码还是很方便. 平时都是写C++,C比较多,借鉴了别人的配置步骤,将sublime打造成IDE ...
- Java不走弯路教程(1.环境搭建)
1.环境搭建在开始写第一个Java程序之前,我们需要做一些简单的准备工作. 1.1 还记得DOS吗 我们可以通过图形界面来操作我们的电脑.但作为程序员,你首先需要学会用命令行的方式来操作电脑,因为不是 ...
- Linux 虚存 linux2.6内核特性
一.大型页面的支持 当代计算机体系结构大都支持多种页面大小,例如,IA-32体系结构支持4KB或4MB的页面, Linux操作系统只是将大型页面用于映射实际的内核映像.大型页面的使用主要是为了改进高性 ...
- 巧用第三方快速开发Android App 热门第三方SDK及框架
巧用第三方快速开发Android App 热门第三方SDK及框架 历经大半年的时间,终于是把这门课程给录制出来了,也就在今天,正式在慕课网上上线了 项目地址:巧用第三方快速开发Android App ...