Mach-O

Mach-O文件结构

每个Mach-O文件包括一个Mach-O头，然后是一系列的载入命令，再是一个或多个块，每个块包括0到255个段。Mach-O使用REL再定位格式控制对符号的引用。Mach-O在两级命名空间中将每个符号编码成“对象-符号名”对，在查找符号时则采用线性搜索法。
Mach-O的基本结构，引用了文件中数据页的变长“加载命令”表，也用于Accent核心的可执行文件格式中，而这种格式则是基于来自Spice Lisp的理念。

多重架构二进制

在NeXTSTEP，OPENSTEP和Mac OS X中，可以将多个Mach-O文件组合进一个多重架构二进制文件中，以用一个单独的二进制文件支持多种架构的指令集。例如，一个Mac OS X中的多重架构二进制可以包含32位和64位的PowerPC代码，或PowerPC和x86的32位代码，甚至包含32位的PowerPC代码，64位PowerPC代码，32位x86代码和64位x86代码。

Mach-O的未来

由于Darwin 10.0（对应Mac OS X 10.6）中对Mach-O文件的结构定义进行了一些重要的修改，因此在Mac OS X 10.6中以默认选项编译的二进制只能在10.6平台中运行。其差异之一在于Mac OS X的连接器（dyld）产生的载入命令无法为早期版本的Mac OS X所理解。另外一个重要改变是Link Edit表（__LINKEDIT段）的作用。在10.6中，新的Link Edit表中的无用信息会被去除，从而起到压缩的作用，而Mac OS X 10.5及以前的版本无法识别这种新格式。为解决这个问题，在连接时常常需要使用-mmacosx-version-min=连接器标志。苹果公司作为Mach-O格式的维护者，推荐开发者在创建二进制应用程序的时候与使用与所用的SDK版本对应的该标志。