objective-c - 在 Xcode 项目目标build设置中,什么是 Mach-O 类型?

标签 objective-c ios xcode linker llvm

在厌倦了无数Match-O linker error之后,我想知道这个东西是什么意思。我想知道这些东西背后的概念,而不是反复试验的解决方案。具体来说,我想知道之间的区别:

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

这些是当我点击链接部分的 Mach-O 类型设置时出现的选项。一些小的定义或一些指向适当内容的链接也可以。

最佳答案

Mach-O ,Mach object file format 的缩写,是一种用于可执行文件、目标代码、共享库、动态加载代码和核心转储的文件格式。对于 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. bundle - 和 bundle 标识符让 iOS 和 OSX 识别您应用的任何更新。它使其在应用程序中具有独特的存在感。
  4. 静态库 - 文件在构建时链接。代码被复制到可执行文件中。库中未被您的程序引用的代码将被删除。只有静态库的程序在运行时没有任何依赖关系。
  5. 可重定位目标文件 - 是动态库的另一种说法。链接动态库时,会根据库在内存中的加载位置计算其中包含的函数的地址。它们是“可重定位的”,因为所包含函数的地址在链接时未确定。 (在静态库中,地址是在链接时计算的。)

关于objective-c - 在 Xcode 项目目标build设置中,什么是 Mach-O 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13082149/

相关文章:

ios - (WeeLoader) 'UITapGestureRecognizer' 未在此范围内声明

ios - 如何将 Youtube 帐户链接到 iOS 中的嵌入式 YTPlayerView 播放器?

Xcode 5.0.1 : How to make folders appear on top of files in the Project Navigator

objective-c - 将数据传递给 UINavigationController Partent

objective-c - NSScrollView 缩放故障

xcode - 安装 XCode 4.2 beta 7 后返回 XCode 4.1

ios - "Assigning retained object to weak property"与初始化?

objective-c - 自定义按钮 titlelabel 文本在点击时将自身设置回默认值

ios - 如何从 NSArray 输出中删除新行

ios - Parse iOS API 中的 NSError 双指针