美文网首页
创建静态库

创建静态库

作者: 漠川 | 来源:发表于2016-02-16 12:56 被阅读52次

一、静态库和动态库的区别:

静态库和动态库是相对编译期和运行期的,静态库以 .a 和 .framework 形式存在,链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝;

动态库以 .dylib 和 .framework 形式存在,链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存,一般只能由系统创建。

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

静态库: .a 和 .framework

动态库: .dylib 和 .framework

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

静态库分为真机—Debug(调试)版本、真机—Release(发布)版本、模拟器—Debug版本、模拟器—Release版本;开发中一般都打包Release(发布)版本,将真机和模拟器版本合并,提供外界。

二、创建静态库

1、新建项目,点击iOS—Framework&Library—Cocoa Touch Static Library。

系统自动生成以工程名命名的.h和.m文件,可自定义的在目录下添加或删除文件。

注意目录下Products文件夹有一个.a文件为红色,说明文件并不存在。

这里我们将系统生成的.h和.m文件删除。

2、点击Build Phases—Copy Files,左下角点击+号按钮,添加你需要暴露的接口头文件。

如果你在静态库工程中使用了category,那么你可能会碰到链接问题,解决的办法就是需要同时在生成静态          库的工程和使用静态库的工程中使用“-all_load”编译选项,即在对应target的"Build Settings"中的“Other Linker Flags”选项添加“-all_load”。

注意:使用静态库的工程中是一定要加该编译选项的!至于生成静态库的工程中加不加没有试过,不过建议还是加上该编译选项。

3、点击Build Phases左上角的+号按钮,选择New Headers Phase 选择需要暴露出来的 .h 文件

4、查看Build Active architecture only 都改为NO

Yes表示只编译选中模拟器设备对应的架构,

No则为编译所有模拟器设备支持的cup架构

(Debug版本同理)

5、分别在模拟器和真机下Command+B编译一下,Products文件夹下的.a文件变为黑色,表示创建成功,否则失败

6、选中Products文件夹下的.a文件,右击 “Show In Finder” ,查看制作好的 .a 文件

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

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

如果 Scheme 是 Release 模式,生成的文件夹就以 Release 开头

7、.a 文件能同时用在真机和模拟器上,需要进行合并

在终端输入指令: lipo -create  模拟器.a文件的路径  真机.a文件的路径  -output  合并后的保存路径(.a)

例如:lipo -create /Users/xxxx/Library/Developer/Xcode/DerivedData/StaticLib/Build/Products/Release-iphoneos/libxxx.a    /Users/xxxx/Library/Developer/Xcode/DerivedData/StaticLib/Build/Products/Release-iphonesimulator/libxxx.a  -output /Users/shelin/Desktop/StaticLib.a

8、使用:只需将.a和暴露出来的.h头文件导入工程目录下就可供外界使用。

相关文章

网友评论

      本文标题:创建静态库

      本文链接:https://www.haomeiwen.com/subject/feipkttx.html