ios中的.dylib和.a lib有什么区别?

时间:2016-11-28 10:10:41

标签: ios xcode frameworks static-libraries

我知道Objective c中的编译和运行时是什么,(方法调配是一个运行时)但是我想知道是什么画了这两个库之间的界限?一个.a和.dylib?他们的目的是什么,除了陈述一个是静态的而另一个是动态的?我们何时需要一个而不是另一个?

2 个答案:

答案 0 :(得分:14)

静态库(.a)

静态库允许应用程序在编译时将代码加载到其地址空间中。这会导致磁盘上的更大尺寸和更慢的启动时间。因为库的代码直接添加到链接目标的二进制文件中,这意味着要更新库中的任何代码,也必须重建链接目标。 enter image description here 动态库(.dylib)

动态库允许应用程序在运行时实际需要时将代码加载到其地址空间中。因为代码没有静态链接到可执行二进制文件中,所以在运行时加载会带来一些好处。主要是,库可以使用新功能或错误修复进行更新,而无需重新编译和重新链接可执行文件。此外,在运行时加载意味着单个代码库可以拥有自己的初始化程序,并在从内存中卸载之前清理自己的任务

enter image description here

答案 1 :(得分:5)

  

.a代表静态库

     

.dylib代表动态库

静态库(.a)

静态库(.a)是一组已编译的类,可以与iOS应用程序开发项目一起使用。它是一个已编译的二进制文件或胖文件,可以在项目之间共享。

您可能希望出于不同原因创建静态库。

例如:

  • 您希望将您和/或您团队中的同事定期使用的一些课程捆绑在一起并轻松分享。

  • 您希望能够集中保存一些常用代码,以便轻松添加错误修正或更新。

  • 您想与多个人共享图书馆,但不允许他们查看您的代码。 -

动态图书馆

以扩展名 .dylib 结尾的文件是一个动态库:它是一个在运行时而不是在编译时加载的库。如果您熟悉Windows或DSO中的 DLL ,那么它或多或少都是相同类型的东西,只有几个曲折。

dylib 类似于windows * .dll文件。它们包含通用的,不可修改的代码,旨在被许多应用程序重用。