如何区分一个FrameWork是动态链接库还是静态库

参考链接:http://www.cnblogs.com/Jenaral/p/5530383.html

关于静态库和动态库的区别。.a .dylib .tbd .framework有什么区别?

首先为什么会存在库?库是有一些接口头文件和编译好的二进制文件组成的,其存在一般有两个意义,一个是封装代码不给别人看,库在构建目标程序的时候,只需要执行link操作,不需要重新编译。

静态库:

    静态库典型的有window下的.lib文件, unix系下的.a文件。静态库和动态库一个很重要的区别是,在编译时候发生的行为。静态库在编译的时候会复制一份到目标程序。动态库在编译的时候只存储指向动态库的引用。

动态库:

    window下的dll文件,mac下的.dylib/.tbd文件。在编译的时候,动态库并不会被复制到目标程序。所以不会影响目标程序的大小。同一份动态库能够被多份程序使用。因为只存储对外的链接,使得程序运行时候的风险比较到,有时候会碰到lib not found的情况。

关于iOS下的framework:

    前面讲了.a .ib.dylib .dll等库文件,那么我们经常在iOS中碰到的.framework是什么呢?framework其实是iOS/mac平台自有的一种格式,其对二进制库,头文件和资源进行了封装,便于分发和管理。在iOS 8 之前只有苹果本身支持的一些framework,比如uikit, nsfoundation等。苹果在iOS 8之前并不支持自己开发的framework.苹果这样做是基于安全考虑,因为动态链接库是不用包含进目标程序的,这给黑客从网络下载动态链接库并执行代码提供了漏洞。此时在iOS平台,动态库失去了其意义,开发者要共享代码的话只能通过.a文件。在iOS8 之后,出现了extension, 此时共享动态库就很有必要了,此时苹果开始支持开发自己的framework,此时自己构建的framework和系统的framework还是有区别的,系统的framework并不需要复制到目标程序。自己开发的framework无论是动态还是静态的,都要复制到目标程序,所以苹果又把这个叫做embeded framework,


Only iOS8+ will allow dynamic frameworks in the app bundle, however.

The way to find out is to look in the .framework and use the file command on the main file:

$ cd iOS/Crashlytics.framework
$ ls -l
total 9984
-rwxr-xr-x  1 andy  staff  4710656 11 Sep 17:11 Crashlytics
drwxr-xr-x  8 andy  staff      272 11 Sep 17:11 Headers
-rw-r--r--  1 andy  staff     1553 11 Sep 17:11 Info.plist
drwxr-xr-x  3 andy  staff      102 11 Sep 17:11 Modules
-rwxr-xr-x  1 andy  staff   146164 11 Sep 17:11 run
-rwxr-xr-x  1 andy  staff   241688 11 Sep 17:11 submit
$ file Crashlytics 
Crashlytics: Mach-O universal binary with 5 architectures
Crashlytics (for architecture armv7):   current ar archive random library
Crashlytics (for architecture armv7s):  current ar archive random library
Crashlytics (for architecture i386):    current ar archive random library
Crashlytics (for architecture x86_64):  current ar archive random library
Crashlytics (for architecture arm64):   current ar archive random library

Where ar archive means "static library".

$ cd /Library/Frameworks/iTunesLibrary.framework/
$ ls -l
total 40
lrwxr-xr-x  1 root  wheel   24 10 Sep 17:38 Headers -> Versions/Current/Headers
lrwxr-xr-x  1 root  wheel   24 10 Sep 17:38 Modules -> Versions/Current/Modules
lrwxr-xr-x  1 root  wheel   26 10 Sep 17:38 Resources -> Versions/Current/Resources
drwxr-xr-x  4 root  wheel  136 10 Sep 17:41 Versions
lrwxr-xr-x  1 root  wheel   22 10 Sep 17:38 XPCServices -> Versions/A/XPCServices
lrwxr-xr-x  1 root  wheel   30 10 Sep 17:38 iTunesLibrary -> Versions/Current/iTunesLibrary
$ file Versions/Current/iTunesLibrary 
Versions/Current/iTunesLibrary: Mach-O universal binary with 2 architectures
Versions/Current/iTunesLibrary (for architecture i386): Mach-O dynamically linked shared library i386
Versions/Current/iTunesLibrary (for architecture x86_64):   Mach-O 64-bit dynamically linked shared library x86_64
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值