博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 生成静态库和动态库
阅读量:2345 次
发布时间:2019-05-10

本文共 1548 字,大约阅读时间需要 5 分钟。

简介

什么是库?

库是程序代码的集合,是共享程序代码的一种方式

根据源代码的公开情况,库可以分为 2 种类型

开源库

公开源代码,能看到具体实现

比如 SDWebImage 、 AFNetworking

闭源库

不公开源代码,是经过编译后的二进制文件,看不到具体实现

主要分为:静态库、动态库

静态库和动态库

静态库和动态库的存在形式

静态库: .a 和 .framework

动态库: .dylib 和 .framework

静态库和动态库在使用上的区别

静态库:链接时,静态库会被完整地复制到可执行文件中, 被多次使用就有多份冗余拷贝 (左图所示)

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

需要注意的是:

项目中如果使用了自制的动态库,不能被上传到 AppStore

1.创建Cocoa Touch Static Library

这里写图片描述
2.我就用默认生成的文件,添加一个函数
这里写图片描述
3.点击运行真机或者模拟器,生成相应的静态库 .a 或者.frame文件
这里写图片描述
4.真机和模拟器的库合并
在终端中输入:

lipo -create /Users/bob/Desktop/liblibFrame_sim.a /Users/bob/Desktop/liblibFrame.a -output test.a

分别对应两个库路径,生成合并库路径

然后生成静态库成了

生成C++动态库

1.创建空的项目
这里写图片描述

2.添加Target

这里写图片描述
3.选择Library
这里写图片描述
4.选择STL 和 Dynamic
这里写图片描述
5.在.cpp文件编写C++代码,然后运行,.dylib文件就是动态库
这里写图片描述

二.生成Framework 静态库和库里面包含第三方库,但是不编译进去的库

这里写图片描述

生成一个Demo 用于调试自己的Framework

这里写图片描述

这是我生成的TestDemo 和FrameWork项目

这里写图片描述

生成workspace

这里写图片描述

打开.xcworkspace 文件 将两个项目的 .xcodeproj 拉进去

这里写图片描述

然后编辑相应文件

这里写图片描述
其中Match-O Type 决定了 库的类型 Static Library 静态库,Dynamic Libray 动态库

还有注意Other Linker Flags ,这个要理解明白

在用第三方库时,我们常常在Xcode的Build Settings下Other Linker Flags里面加入-ObjC标志,它和Objective-C的一个重要特性:类别(category)有关。根据这里的解释,Unix的标准静态库实现和Objective-C的动态特性之间有一些冲突:Objective-C没有为每个函数(或者方法)定义链接符号,它只为每个类创建链接符号。这样当在一个静态库中使用类别来扩展已有类的时候,链接器不知道如何把类原有的方法和类别中的方法整合起来,就会导致你调用类别中的方法时,出现”selector not recognized”,也就是找不到方法定义的错误。为了解决这个问题,引入了-ObjC标志,它的作用就是将静态库中所有的和对象相关的文件都加载进来。

不要以为这样就可以解决所有问题了,在64位的Mac系统或者iOS系统下,链接器有一个bug,会导致只包含有类别的静态库无法使用-ObjC标志来加载文件。变通方法是使用-all_load 或者-force_load标志,它们的作用都是加载静态库中所有文件,不过all_load作用于所有的库,而-force_load后面必须要指定具体的文件他们加载的位置也是在Xcode的Build Settings下Other Linker Flags里面。

有时候还会遇到这个问题

现在解决让接入用户共享我们库里面的第三方文件

你可能感兴趣的文章
ASP.NET MVC 2博客系列之一:强类型HTML辅助方法
查看>>
详解Asp.net MVC DropDownLists
查看>>
Asp.net MVC防止图片盗链的实现方法,通过自定义RouteHandler来操作
查看>>
VS2010的智能提示没有了的可能原因
查看>>
Creating a Cascading Dropdown in ASP.net MVC 3 and jQuery (1)
查看>>
创建联动的 DropdownList in ASP.net MVC 3 and jQuery (2)
查看>>
HTTP触发Jenkins参数化构建(CORS Plugin)
查看>>
来自 Serenity 的 Java 8 的一些使用技巧
查看>>
ubuntu12.04--子进程 已安装 post-installation 脚本 返回了错误号 1
查看>>
系统--电脑开机一声长响
查看>>
系统--A disk read error occurred Press Ctrl+Alt+d...
查看>>
Some projects cannot be imported because they a...
查看>>
ubuntu-android--make: *** [out/host/linux-x86/o...
查看>>
原子变量与synchronized详细解释
查看>>
java.lang.OutOfMemoryError: PermGen space及其解决方法
查看>>
如何让ajaxfileupload.js支持IE9,IE10,并可以传递多个参数?
查看>>
highcharts扩展tooltip提示异步信息
查看>>
activiti--History 历史配置
查看>>
activiti--部署bpmn/bar文件详解
查看>>
win7使用Putty 连接debain
查看>>