2015-11-04 56 views
2

我遇到过多个网站描述该框架可以包含静态以及动态库。但是,如何确定框架实际包含的是动态库还是静态库。我首先想到了扩展的帮助(.a用于静态库,.dylib用于动态库),但我在框架内看到的所有内容都是针对打包的二进制文件提供的扩展。有什么方法可以找到它是静态库还是动态库。框架在IOS中包含静态或动态库里面

而且我看了兰登富勒上的静态库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中解释框架,了解它们包含的内容以及它们如何在两级别名称空间方面的工作。

回答

0

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

file Path/To/YourLib.framework/YourLib 

如果一个特定的架构(ARMv7的,arm64等)的输出称ar archive其静态库,在另一方面,如果任何它说dynamically linked shared library架构,然后它毫不意外地是一个动态库。

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

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