在Xcode项目目标构建设置中,什么是Mach-O类型?

Max*_*Max 18 xcode linker objective-c llvm ios

在厌倦了众多Match-O链接器错误后,我想知道这件事意味着什么.我想知道这些事情背后的概念,而不是试错法.具体来说我想知道之间的区别:

  1. 可执行文件
  2. 动态库
  3. 静态库
  4. 可重定位目标文件

这些是我单击链接部分上的Mach-O类型设置时显示的选项.一些小的定义或一些指向适当内容的链接也可以.

Sri*_*aju 30

Mach-O是Mach对象文件格式的缩写,是可执行文件,目标代码,共享库,动态加载代码和核心转储的文件格式.对于unix用户来说,这就像a.out改进了一样.这是Mac OS X和iPhone OS库中用于可执行文件的格式.

如您所知,iOS设备(iPhone,iPad等)具有不同的架构ARMv6(iPhone 2G + 3G,iPod Touch)和ARMv7(iPhone 3GS,iPod Touch 2G + 3G),但Xcode中使用的模拟器主要在i386平台上运行.这意味着库客户端必须为模拟器和设备设置单独的目标.单独的目标复制大多数信息,并且仅在包含的静态库中有所不同.因此,如果您遇到Mach-O链接器错误,则意味着xcode无法链接到该目标设备的其中一个库; 因此编译失败.

现在你的定义 -

  1. 可执行文件 - 已编译的机器目标程序准备以二进制格式运行.
  2. 动态库 - 在运行时链接 - 带有动态库引用的程序将在启动(或按需)时加载和链接库.
  3. 捆绑包 - 和捆绑包标识符让iOS和OSX识别您的应用程序的任何更新.它在应用程序中赋予它独特的存在感.
  4. 静态库 - 文件在构建时链接.代码被复制到可执行文件中.将删除程序中未引用的库中的代码.只有静态库的程序在运行时没有任何依赖项.
  5. 可重定位目标文件 - 是动态库的另一个词.当您与动态库链接时,将根据库在内存中的加载位置计算其中包含的函数的地址.它们是"可重定位的",因为包含的函数的地址不是在链接时确定的.(在静态库中,地址是在链接时计算的.)


iDe*_*Dev 6

根据苹果文档,

Mach-O型定义

检查这些以获取更多详细信息构建Mach-O文件Xcode构建设置参考