静态库

作者: gpr | 来源:发表于2015-12-31 17:25 被阅读247次

OC中库的种类


静态库

  • .a
  • .framework(被苹果官方逼出来的产物)

动态库

  • framework
  • dylib(苹果官方专用)

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

  • 静态库在链接的时,会被完整的复制到可执行文件中,被多次使用就有多份冗余拷贝
  • 动态库在链接的时候不会复制,程序运行的时候由系统动态加载到内存,共程序使用系统只加载一次,多个程序共用,节省内存

为什么苹果不推荐我们使用自己做的动态库

  • 由于动态库是供多个应用程序使用的,如果我们使用了动态库到用户的手机上,可能动态库上的某些方法名字或者函数名字跟其他动态库有冲突,到时候会造成系统的一团乱糟

静态库(.a)的制作过程

  • 注意: 如果静态库中包含了Category,有时候在使用静态库的工程中会报“方法找不到”的错误(unrecognized selector sent to instance),在使用静态库的工程中配置other setting->Other Linker Flags为-ObjC
  • 创建一个静态库,把里面产生的源文件删除
  • 如果库文件比较多,我们要注意先到 target -> Build Phases -> 点+号创建 Headers 出来
  • 把要编译的库源文件拖到项目中
  • target -> Build Phases -> Headers中选择库文件中要暴露出来的头文件(拖到public)中
  • 一般我们都要编译两种文件给调用者 真机版本 + 模拟器版本,编译的时候我们分别选择 iPhoneiOS Device两项来编译
  • 如果没有特殊情况的话,在 Products 中可以看到 .a文件,如果显示红色代表不在项目文件夹中,这时候需要到xcode的缓存中寻找 :
    • (Finder)前往 -> 个人 -> 资源库 -> Develop -> Xcode -> DerivedData (/Users/mac/Library/Developer/Xcode/DerivedData) ,清空里面的东西
    • 在分别选择模拟器和真机分别编译,注意,真机编译的时候可能会出现错误,但是.a能正常编译出来,错误不用管
  • Products 中得到两个版本的.a文件,为了方便我们需要把两个版本的.a文件合并成一个版本
  • 终端中的合成指令 : lipo -create 模拟器 .a 文件所在目录的路径/.a文件名字 真机 .a 文件所在目录的路径/.a文件名字 -output 要合成的 .a 文件名字,通常以lib为前缀
  • 使用的使用注意事项,把 暴露的头文件提供给调用者, .a文件相当于我们平常使用的.m文件,然后可以正常使用,如果要依赖其他资源文件(例如.bundle文件),要一块提供给调用者

查看一个静态库所支持的 CPU 构架

lipo -info .a全路径

各版本的CPU构架

armv6 iPhone iPhone2 iPhone3G 第一代和第二代iPod Touch
armv7 iPhone4 iPhone4S
armv7s iPhone5 iPhone5C
arm64 iPhone5S

相关文章

  • 目录一、库二、静态库、动态库、Framework三、打包静态库 1、.a静态库和.framework静态库的区别 ...

  • iOS静态库之间互调冲突问题

    研究目的 1. 在其他静态库(B静态库)中导入公共静态库(A静态库),想直接使用公共静态库(A静态库)中的方法和m...

  • iOS小知识 -- 静态库(一)

    静态库静态库的介绍.a静态库的制作以及测试静态库的架构问题.framework静态库的制作以及测试边开发边制作静态...

  • 静态库

    静态库 静态库动态库简介 .a 静态库:被编译好的二进制文件 静态库:.a, .framework 动态库: .d...

  • Ndk生成so和a库,然后主项目进行调用

    在 NDK 开发中引入第三方静态库和动态库 静态库和动态库 静态库 静态库文件后缀一般为 .a ,利用静态库编译成...

  • iOS 静态库和动态库的制作

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

  • ios中静态库.a的制作

    在ios中制作静态库之前,先来了解关于静态库的一些概念。 八、静态库和动态库在使用上的区别。静态库:链接时,静态库...

  • ios中静态库.a的制作和使用

    在ios中制作静态库之前,先来了解关于静态库的一些概念。 八、静态库和动态库在使用上的区别。静态库:链接时,静态库...

  • iOS 静态库

    iOS 静态库 iOS 静态库

  • 静态库和动态库

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

网友评论

    本文标题:静态库

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