静态库和动态库

静态库和动态库的存在形式
静态库: .a 和 .framework

动态库: .dylib 和 .framework

静态库和动态库在使用上的区别
静态库:链接时,静态库会被完整地复制到可执行文件中, 被多次使用就有多份冗余拷贝

动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存

制作 .a

新建项目-> 选择 “Cocoa Touch Static Library”

就在.h文件中,写入功能函数!简单的直接写入1个方法,并实现方法,例子是把输入的字符串打印两边

#import <Foundation/Foundation.h>

@interface MyStaticLibraryDM : NSObject

//将输入的字符串打印两边
-(void)printMyInput:(NSString*)inputString; @end
#import "MyStaticLibraryDM.h"

@implementation MyStaticLibraryDM

-(void)printMyInput:(NSString*)inputString{

    NSLog(@"inputString === %@ twice is ==== %@",inputString,inputString);
} @end

然后,调试代码无误后,就可以进行编译了

编译静态库

注意:需要修改Build Settings中的 Build Active Architecture Only 以满足运行不同CPU环境的模拟器。 将此设置为NO。

在不同编译环境下编译会生成四种静态库,debug模拟器,debug真机,release模拟器,release真机,我们需要将运行环境调至不同的状态并生成如上四种形式的静态库。这里只以一种情况为例:
设置是Debug还是release
选择Edit Scheme--> Buid Configuration设置为release
设置模拟器还是真机
就是设置模拟器还是真机,因为之前我们将只编译当前环境设置为NO,所以编译出来的静态库会支持各种CPU环境。

最后按住 command+b 编译!

你会发现你的静态库文件从红色变成了黑色,这就是编译完成了啊。可以 show in finder 查看文件所在位置。

上面是我在不同环境运行之后的结果

Debug-iphoneos 文件夹里面的东西是用在真机上的
Debug-iphonesimulator 文件夹里面的东西是用在模拟器上的

其他是在Release模式环境生成的

如果想让一个 .a 文件能同时用在真机和模拟器上,需要进行合并
在终端输入指令

lipo -create 静态库1 静态库2 -output 新静态库名称.a
localhost:~ micaimanong$ cd /Users/micaimanong/Library/Developer/Xcode/DerivedData/MyStaticLibraryDM-fczwjaefnkvdmjelggxccgpicgwy/Build/Products 
localhost:Products micaimanong$ lipo -create Debug-iphoneos/libMyStaticLibraryDM.a Debug-iphonesimulator/libMyStaticLibraryDM.a -output libMyStaticLibraryDM.a

先进入products 在将其中的两个合并 合并之后生成一个新的.a文件

如下图所示 libMyStaticLibraryDM.a 支持模拟器和真机

最后就是引用了

在你的要使用太静态库的项目中导入libMyStaticLibraryDM.a文件和include文件夹中的相应的所有.h头文件。
 
例如,我要在MyLibraryTest项目中,使用我上述编译好的静态库文件。
 
导入完成后,项目如下:
 

之后引用文件并实现方法

打印如下 将输入的字符串打印了两边

如果遇到下面的问题

原因是你导入错误的编译版本。
以上错误,是你的库文件(.a)为真机版本,你却用模拟器来调试程序。将调试目标换成真机,或者使用合并之后的(.a)文件也可以解决。

操作时会遇到很多问题,具体问题具体对待。

iOS开发之静态库.a 以及合并的更多相关文章

  1. iOS开发中静态库之".framework静态库"的制作及使用篇

    iOS开发中静态库之".framework静态库"的制作及使用篇 .framework静态库支持OC和swift .a静态库如何制作可参照上一篇: iOS开发中静态库之" ...

  2. iOS开发中静态库制作 之.a静态库制作及使用篇

    iOS开发中静态库之".a静态库"的制作及使用篇 一.库的简介 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的类型? 根据源代码的公开情况,库可以分为2种类 ...

  3. iOS开发之静态库(五)—— 图片、界面xib等资源文件封装到静态框架framework

    编译环境:Macbook Air + OS X 10.9.2 + XCode5.1 + iPhone5s(iOS7.0.3) 一.首先将资源文件打包成bundle 由于bundle是静态的,所以可以将 ...

  4. 李洪强iOS开发之静态库的打包一

    李洪强iOS开发之静态库的打包一 //静态库一般做一下几种事情 //1 工具类 算法逻辑 新建工具类LHQTools 定义类方法 + (NSInteger)sumWithNum1: (NSIntege ...

  5. iOS开发之静态库(四)—— 静态框架framework制作

    前面介绍过,虽然苹果公司禁止在iOS开发中使用动态库,而且也从XCode中移除了创建静态框架的功能,但我们还是可以通过对XCode进行小小的改动来创建静态框架. 编译环境:Macbook Air + ...

  6. 【转】 iOS 开发之静态库.a和动态库详解 -- 不错

    原文网址:http://blog.csdn.net/lxl_815520/article/details/52154331 一, 简单介绍 1.什么是库 库是程序代码的集合,是共享程序代码的一种方式 ...

  7. 李洪强iOS开发之静态库

    iOS开发拓展篇—静态库 一.简单介绍 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的分类 根据源代码的公开情况,库可以分为2种类型 (1)开源库 公开源代码,能看到具体实现 ...

  8. iOS开发之静态库(三)—— 图片、界面xib等资源文件封装到.a静态库

    编译环境:Macbook Air + OS X 10.9.2 + XCode5.1 + iPhone5s(iOS7.0.3) 一.首先将资源文件打包成bundle 新建工程:File -> Ne ...

  9. iOS开发之静态库(二)—— .a

    前面已经介绍了iOS中静态库的基本概念和特点,这里就不再多废话,直接上代码 编译环境Xcode5.1 + Mac OS X 10.9.3 新建静态库项目 Xcode中创建静态库的模板有两个,一个是创建 ...

随机推荐

  1. Opencv convertScaleAbs

    void cv::convertScaleAbs( cv::InputArray src, // 输入数组 cv::OutputArray dst, // 输出数组 double alpha = 1. ...

  2. [SHELL]:let 命令详解

    [SHELL]:let 命令详解 摘自:https://blog.csdn.net/happygongzhuo/article/details/6819099 let :简单的计算器  语 法let[ ...

  3. Insufficient free space for journal files

    前两天请假了,公司的很多app突然挂掉了,说是mongodb莫名的挂掉了,赶紧进去看了看日志: --31T14:: [initandlisten] ERROR: Insufficient free s ...

  4. 汉诺塔(hanoi)

    汉诺塔代码: def hanoi(n,x,y,z): if n == 1: print(x,'-->',z) else: hanoi(n-1,x,z,y) print(x,'-->',z) ...

  5. hibernate的hibernate.cfg.properties

    1.hibernate.cfg.properties  配置文件要放在工程目录src下,编译的时候会自动放在/bin目录下 ,所以Configuration configuration=new Con ...

  6. Smarty模板的引用

    (1)include用法和php里的include差不多(2)smarty的include还具备自定义属性的功能例如 {include file="header.tpl" titl ...

  7. [GO]字符串的使用

    package main import ( "fmt" "strings" ) func main() { //判断字符串1是否包含字符串2,如果包含则返回tr ...

  8. GitLab服务器IP地址修改

    gitlab安装介绍:https://about.gitlab.com/downloads/#centos7 刚搭建好的gitlab在GitLab上新建一个项目test_gitlab,刚开始仓库地址是 ...

  9. javascript总结40:DOM中操作样式的两种方式

    1 DOM中操作样式的两种方式 1 通过元素的style属性 注意: 通过style属性设置样式时,css中要写单位的属性,在js代码中也要加单位 //html <div id="bo ...

  10. 编写高质量代码改善C#程序的157个建议——建议134:有条件地使用前缀

    建议134:有条件地使用前缀 在.NET的设计规范中,不建议使用前缀.但是,即便是微软自己依然广泛的使用这前缀. 最典型的前缀是m_,这种命名一方面是考虑到历史沿革中的习惯问题,另一方面也许我们确实有 ...