首页 文章

ios中的框架包含静态或动态库

提问于
浏览
2

我遇到过多个网站,描述框架可以包含静态库和动态库 . 但是,如何确定框架实际包含的是动态库还是静态库 . 我想到了第一个获得扩展的帮助(.a用于静态库,.dylib用于动态库)但是我在框架中看到的所有我正在试验的是没有为打包在里面的二进制文件提供扩展 . 有什么方法可以找到它是静态库还是动态库 .

此外,我还阅读了Landon Fuller关于静态库的帖子http://landonf.bikemonkey.org/code/ios/Radar_15800975_iOS_Frameworks.20140112.html,其中他提到框架为库提供了两个级别的命名空间,但是它涵盖了正常的调试符号而不仅仅是依赖关系,它是否适用于在框架内打包的静态库 .

E.x.如果我在框架内以及与之链接的项目代码库中具有相同的调试符号,会发生什么 . 在这种情况下,两级命名空间是否可行 .

另外根据这个作者http://ddeville.me/2014/04/dynamic-linking/框架是包含动态库,头文件和资源的包或包 .

根据以下帖子Library? Static? Dynamic? Or Framework? Project inside another project,它说框架可以包含静态库和动态库 .

我很困惑 . 有人可以在iOS中解释它们包含的内容以及它们如何在两级命名空间方面工作 .

1 回答

  • 0

    要回答问题的第一部分,是的,您的理解是正确的,框架只是捆绑库图像的目录结构(编译的机器代码, Headers ,资源等) . 验证Framework是否实际上是静态库或动态使用以下命令

    file Path/To/YourLib.framework/YourLib
    

    如果某个特定体系结构(armv7,arm64等)的输出显示 ar archive 它是一个静态库,另一方面如果对于任何体系结构它说 dynamically linked shared library 那么它的动态库就不足为奇了 .

    如果您自己创建框架项目,则可以通过设置项目的 Mach-O Type 构建设置来选择构建静态或动态图像 .

    如果在多个位置定义相同的符号(例如,用于例如函数名称),则存在不同的可能性 . 在几乎所有情况下,行为都会导致链接时错误抱怨多个符号异常是动态链接的框架,在这种情况下,您可能会看到不一致的行为,其中符号将从首先加载到内存中的动态框架加载 .

相关问题