在Xcode项目目标构建设置,什么是Mach-O的类型?(In Xcode project targ

2019-08-01 23:38发布

厌倦了无数比赛-O链接错误之后,我想知道这件事情表示。 相反的试验和错误的解决方案,我想知道这些事情背后的概念。 具体来说,我想知道的区别:

  1. 可执行文件
  2. 动态库
  3. 静态库
  4. 浮动对象文件

这是当我的Mach-O类型设置,单击链接部分提出的备选方案。 一些小的定义或一些链接适当的内容是确定了。

Answer 1:

Mach-O的 ,短于马赫对象文件格式是可执行文件,目标代码,共享库,动态加载代码的文件格式,并且核心转储。 对于UNIX用户来说,这就像a.out ,但与改进。 这是在Mac OS X及iPhone OS库用于可执行文件的格式。

正如你所知道的iOS设备(iPhone,iPad的等)有不同的体系结构的ARMv6(iPhone 2G + 3G,iPod的触摸)和ARMv7(iPhone 3GS的,iPod Touch的2G + 3G),但在Xcode中使用的模拟器运行大多i386平台。 这意味着该库的客户必须为模拟器和设备设置单独的目标。 单独的目标重复最多的信息,并且仅在静态库不同包括在内。 所以,如果你得到一个Mach-O的连接错误是什么意思的是,Xcode是有链接到该目标设备的图书馆之一麻烦; 作为编译失败的结果。

现在你的定义 -

  1. 可执行文件 - 编译机有针对性的程序准备以二进制格式中运行。
  2. 动态库 - 运行时链接 - 在它启动时(或按需)与一个动态库引用一个程序将加载,然后链接库。
  3. 套装 - 和捆绑标识符让iOS和OSX承认任何更新您的应用程序。 这使得它在应用程序中一个独特的存在。
  4. 静态库 - 文件在构建时联系。 代码被复制到可执行。 在没有你的程序中引用的库代码被删除。 只有静态库的程序在运行时没有任何相关性。
  5. 定位目标文件 - 是一个动态库的另一个字。 当你与一个动态链接库,包含内计算的函数的地址的基础上,在库加载到内存中。 他们是“重定位”,因为所包含的函数的地址并不在链接时确定的。 (在静态库中,地址期间链路时间计算的。)


Answer 2:

按照苹果的文档,

检查此了解更多详情大厦的Mach-O文件和Xcode的构建设置参考



文章来源: In Xcode project target build settings, What is Mach-O Type?