Git/.a静态库的介绍:创建和使用
2015-11-01 20:56
330 查看
一、
创建.a静态库
1. 选择Cocoa Touch Static Library 一栏:
2. 编译
编译时时先用真机编译一次,.a文件的颜色就会从红色变为黑色;
默认编译后(真机/模拟器分别运行)只会输出自带的.h, 不会输出新建类的.h;
需要手动做修改“选择项目--> Build Phases --> Copy file --> 添加.h”。
二、
测试.a静态库
1.模拟器的架构问题:
1> 常见报错:
Undefined symbols for architecture arm64 / i386 /armv7s/ armv7
//architecture: 架构
解决方式:
检查静态库的架构问题,看看是否模拟器和真机导入错误。
2> 模拟器和真机的架构
模拟器:2种架构
i386 : 4S ~ 5 --> 32
x86_64 : 5S ~ 6s --> 64
真机: 3种架构
armv7 : 4 ~ 4s
armv7s : 5 ~ 5c
arm64 : 5S ~ 6s
模拟器编译时默认只输出一种架构;
真机(不要插入iPhone),默认输出多种架构,
除了armv7s;
//从2014年10月的某个版本更新中,
取消了armv7s为默认输出选项
//架构是支持低版本兼容,即向低版本兼容。
2.
查看静态库支持的架构
cd到静态库目录下
查看架构: lipo -info lib.a
3.
架构的合成
方式一:
命令行,
两两合并
(真机不插iPhone,
默认已经多个架构
--> 模拟器合成一次,
再跟真机合成一次就行了)
lipo -create
静态库1.a
静态库2.a -output
新静态库.a
方式二:
更改编译参数
点击库文件
--> Target --> Build Setting -->
只编译当前架构选项改为NO
修改参数之后,
如果是模拟器编译,
则直接编译成2个版本之和;
但是如果是真机编译,依然只是编译成2个版本之和;
并且,最后两者还需要合并一次。
4.
合成静态库的优缺点
如果合成:比如友盟
优点:
调试方便
缺点:
体积大
如果不合成:比如百度2.8.1版本
优点:减少文件体积
缺点:真机和模拟器切换调试非常不方便
如何打包出armv7s架构
?
可以进入Build Setting -->
手动添加三个架构,
然后编译即可。
5. Release和Debug模式的区别
Debug:
调试状态:NSLog
拥有丰富的调试代码, 但用户不需要加载这些代码
Release:
发布状态:系统会在打包时取出一些调试代码,
文件体积变小,
运行速度变快(用户不会感受到明显的感觉)
最好发布Release版本。
三、 添加资源文件
1. 将文件夹后缀改为.bundle即可生成bundle资源文件夹。
2. 资源文件(如图片)一定要放到bundle文件夹下,
保证路径加载是唯一的资源.
否则可能会跟项目里的同名文件发生冲突,
导致文件加载出错。
3.生成静态库的.m文件中使用到资源文件时,要加资源文件的路径,如@“Lib.bundle/pig.png”,如下两种方法都可。
四、边开发边调试.a静态库
1.
创建普通的项目;
2.
添加项目Target,
创建库文件,
并实现相关方法;
3.
在项目中手动导入.a文件
(重要);
4.
此时.a是通用文件,
什么架构都可以使用.
5.
如果想导出静态库文件,
那么切换Target,
按照之前所学输出即可,需要注意下图所示的地方.
此外,开发阶段都是默认生成debug库文件,如果要生成release发布版本的库文件,按下图所示操作:
结果展示:
创建.a静态库
1. 选择Cocoa Touch Static Library 一栏:
2. 编译
编译时时先用真机编译一次,.a文件的颜色就会从红色变为黑色;
默认编译后(真机/模拟器分别运行)只会输出自带的.h, 不会输出新建类的.h;
需要手动做修改“选择项目--> Build Phases --> Copy file --> 添加.h”。
二、
测试.a静态库
1.模拟器的架构问题:
1> 常见报错:
Undefined symbols for architecture arm64 / i386 /armv7s/ armv7
//architecture: 架构
解决方式:
检查静态库的架构问题,看看是否模拟器和真机导入错误。
2> 模拟器和真机的架构
模拟器:2种架构
i386 : 4S ~ 5 --> 32
x86_64 : 5S ~ 6s --> 64
真机: 3种架构
armv7 : 4 ~ 4s
armv7s : 5 ~ 5c
arm64 : 5S ~ 6s
模拟器编译时默认只输出一种架构;
真机(不要插入iPhone),默认输出多种架构,
除了armv7s;
//从2014年10月的某个版本更新中,
取消了armv7s为默认输出选项
//架构是支持低版本兼容,即向低版本兼容。
2.
查看静态库支持的架构
cd到静态库目录下
查看架构: lipo -info lib.a
3.
架构的合成
方式一:
命令行,
两两合并
(真机不插iPhone,
默认已经多个架构
--> 模拟器合成一次,
再跟真机合成一次就行了)
lipo -create
静态库1.a
静态库2.a -output
新静态库.a
方式二:
更改编译参数
点击库文件
--> Target --> Build Setting -->
只编译当前架构选项改为NO
修改参数之后,
如果是模拟器编译,
则直接编译成2个版本之和;
但是如果是真机编译,依然只是编译成2个版本之和;
并且,最后两者还需要合并一次。
4.
合成静态库的优缺点
如果合成:比如友盟
优点:
调试方便
缺点:
体积大
如果不合成:比如百度2.8.1版本
优点:减少文件体积
缺点:真机和模拟器切换调试非常不方便
如何打包出armv7s架构
?
可以进入Build Setting -->
手动添加三个架构,
然后编译即可。
5. Release和Debug模式的区别
Debug:
调试状态:NSLog
拥有丰富的调试代码, 但用户不需要加载这些代码
Release:
发布状态:系统会在打包时取出一些调试代码,
文件体积变小,
运行速度变快(用户不会感受到明显的感觉)
最好发布Release版本。
三、 添加资源文件
1. 将文件夹后缀改为.bundle即可生成bundle资源文件夹。
2. 资源文件(如图片)一定要放到bundle文件夹下,
保证路径加载是唯一的资源.
否则可能会跟项目里的同名文件发生冲突,
导致文件加载出错。
3.生成静态库的.m文件中使用到资源文件时,要加资源文件的路径,如@“Lib.bundle/pig.png”,如下两种方法都可。
四、边开发边调试.a静态库
1.
创建普通的项目;
2.
添加项目Target,
创建库文件,
并实现相关方法;
3.
在项目中手动导入.a文件
(重要);
4.
此时.a是通用文件,
什么架构都可以使用.
5.
如果想导出静态库文件,
那么切换Target,
按照之前所学输出即可,需要注意下图所示的地方.
此外,开发阶段都是默认生成debug库文件,如果要生成release发布版本的库文件,按下图所示操作:
结果展示:
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- Aut2Exe编译au3脚本为可执行文件
- DLL(Dynamic Linkable Library) 详解说明
- CentOS 6.3下编译安装Ruby 2.0笔记
- 把Lua编译进nginx步骤方法
- Lua中编译执行代码相关的函数详解
- Chrome Visual Studio 2005下的编译过程
- Windows下使用Cygwin编译MySQL客户端
- android的编译和运行过程深入分析
- c#中xml文档注释编译dll引用到其它项目示例
- 深入探讨Linux静态库与动态库的详解(一看就懂)
- PHP Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\
- Lua cjson模块编译笔记及错误解决方法
- SQLSERVER编译与重编译发生场景及重用的利弊介绍