【问题标题】:iOS is it a static or a dynamic framework?iOS是静态框架还是动态框架?
【发布时间】:2015-12-12 01:16:26
【问题描述】:

这听起来像是一个愚蠢的问题,但是如果您有一个 thirdParty.framework 文件,您能分辨它是静态的还是动态的?我的意思是,如果你往里面看,它们看起来会不一样吗?

【问题讨论】:

    标签: ios objective-c static-linking dynamic-linking


    【解决方案1】:

    两者都可以。

    不过,只有 iOS8+ 允许在 app bundle 中使用动态框架。

    找出方法是查看.framework,并在主文件上使用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
    

    ar archive 表示“静态库”。

    或者,“动态”框架看起来像这样,并明确声明它是动态链接的。

    $ 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
    

    【讨论】:

    • 您能否详细说明“在主文件上使用文件命令”?我应该在终端打电话吗?
    • 将动态框架链接到您的应用程序时,您需要使用嵌入式库吗?我在启动时遇到运行时错误dyld __abort_with_payload,这意味着该库未正确链接。令人困惑的是,如果我把它放在嵌入式库中,它可以工作,但如果我立即再次取出它,它仍然可以工作。发生了一些我不明白的微妙事情。
    • 您能否澄清第二个终端会话显示的内容?我假设它显示了一个动态框架的输出,但答案中的任何地方都没有明确说明。
    【解决方案2】:

    我使用此命令从具有框架列表的路径中列出所有 STATIC 框架:

    find -E . -type f -iregex ".*\.framework\/[^./]*" -exec file {} \; | grep ': current ar archive' | sed 's/.*\/\(.*.framework\).*/\1/'
    

    【讨论】:

    • Thnx ? 在 current ar archive 之前删除了 : 以使其正常工作。带有标签的终端输出,不适合在网站上复制/粘贴内容。
    • 我应该在哪个目录级别运行它?
    猜你喜欢
    • 1970-01-01
    • 2021-10-03
    • 2015-03-10
    • 1970-01-01
    • 2019-10-30
    • 2014-11-16
    • 2011-07-22
    • 1970-01-01
    • 2012-04-02
    相关资源
    最近更新 更多