当前位置:网站首页 > 编程语言 > 正文

动态库和静态库的区别是什么(简述静态库与动态库的概念及差异)



  与java和.net一样,objc也由类库的概念,不过在在objc上一般叫库,库表示程序代码集合,可以共享给其他程序使用,库是编译后的二进制文件,因此不能看到源代码,多用于一些开放sdk(如百度地图sdk),商用库,这两天在研究iOS上编译静态库,这里把编译的过程和中间遇到的一些问题做一下记录,方便以后查阅

  objc上的库一般分为两类

    静态库: .a 和 .framework

      链接时,静态库会被完整地复制到可执行文件中,例如iOS程序打包的时候会包含所有引用的静态库

    动态库: .dylib 和 .framework

      iOS项目不支持动态库,每个APP都是独立运行的,并且不能直接互相访问,APP只能访问系统自带的动态库,动态库系统只加载一次,并可以用于多个程序共享的,一般在用于桌面系统,链接时不会被添加到可执行文件,如果动态链接库不存在,程序可能执行失败

  这里只讨论静态链接库,这里只讨论.a文件的生成,.framework文件先不讨论

1、下面我们创建一个自己的静态库(Cocoa Touch Static Library)

如何确定iOS项目中哪些库是动态库_静态库

2、添加自己的类和category

一般是把库里面的文件放在一个头文件中引用,这样外部在使用的时候直接引用该头文件即可

如何确定iOS项目中哪些库是动态库_xcode_02

3、设置支持的最低版本和最高版本

  Base SDK:是当前类库是基于哪个版本的SDK开发的,也就是最高支持的SDK

  Deployment Target:类库支持的最低版本

如何确定iOS项目中哪些库是动态库_c/c++_03

如何确定iOS项目中哪些库是动态库_xcode_04

4、配置编译选项

  由于我们编译的是类库,在使用的时候需要支持Debug和Release两种模式下,需要编译所有的architecture版本

如何确定iOS项目中哪些库是动态库_如何确定iOS项目中哪些库是动态库_05

  4、编译(Cmd + B)

    我们分别切换到模拟器和真机模式进行编译,在真机模式下编译完成后,Products中的文件会变正常(原来为红色)   

    注意,需要设置Build Release 版本

    

如何确定iOS项目中哪些库是动态库_静态库_06

如何确定iOS项目中哪些库是动态库_静态库_07

如何确定iOS项目中哪些库是动态库_静态库_08

如何确定iOS项目中哪些库是动态库_xcode_09

5、编译完成

  编译完成后我们得到很多个.a文件,每个目录下都对应一个.a文件,从libCalculator.a进入Finder查看

    iphoneos是真机用的

    iphonesimulator是给模拟器用的

如何确定iOS项目中哪些库是动态库_xcode_10

6、使用

  我们创建一个iOS项目,吧相关的.a文件和.h文件拖到我们的项目中,拖入后,xcode会自动把静态库添加到工程

如何确定iOS项目中哪些库是动态库_xcode_11

    这里需要注意的是

      1、头文件也要引入到工程里面(不然你怎么用)

      2、模拟器和真机对应的.a文件不一样,根据需要引用.a文件

-ObjC

如何确定iOS项目中哪些库是动态库_如何确定iOS项目中哪些库是动态库_12

      3、其他编译参数        

        引用自:

      4、如果静态库中采用ObjectC++实现,或者静态库使用C/C++写的,在调用的时候可能出错,因此需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm)

        或者在工程属性中指定编译方式,即将XCode的Project -> Edit Active Target -> Build -> GCC4.2 - Language -> Compile Sources As设置为"Objective-C++"

        引用自:

7、合并.a文件

  上面看到,编译后的用于模拟器的静态库和用于真机的静态库不一样,每次切换的适合都得重新引用.a文件,这样显得特别麻烦,苹果提供了一个合并多个.a文件的方法,合并后的.a文件真机和模拟器都支持(合并后大小为原来两个文件大小之和)

  在终端通过命令合并

  还有一种方法可以动态的引用静态库,就是通过配置工程的库引用路径和编译标示,编译的适合xcode会根据当前的环境自动找到相关的.a库,参见:

8、Demo

  

到此这篇动态库和静态库的区别是什么(简述静态库与动态库的概念及差异)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 怎么删除虚拟硬盘(硬盘虚拟内存怎么删除)2025-06-28 17:54:07
  • sin miedo什么意思(sin&mi是什么牌子)2025-06-28 17:54:07
  • Seatel官网(sea limited官网)2025-06-28 17:54:07
  • 中国阶级分层图地形(中国阶级分层图地形图)2025-06-28 17:54:07
  • u盘制作pe系统启动盘要多久(u盘pe启动盘制作方法)2025-06-28 17:54:07
  • 赛博朋克2077 战斗系统(赛博朋克2077战斗系统)2025-06-28 17:54:07
  • 用diskgenius制作dos启动盘(diskgenius怎么制作启动盘)2025-06-28 17:54:07
  • 速排小蚂蚁客服(小蚂蚁官方客服)2025-06-28 17:54:07
  • 腾讯会员怎么给别人用二维码登录电脑(腾讯会员怎么给别人用二维码登录电脑)2025-06-28 17:54:07
  • 线上小程序制作多少钱(小程序制作一个需要多少钱!每年都需要交钱吗)2025-06-28 17:54:07
  • 全屏图片