Mach-O(まーく・おー)はコンパイラが生成するオブジェクトファイルおよび実行ファイルファイルフォーマットである。NEXTSTEPに由来し、macOSで標準のバイナリファイルフォーマットとして採用されている。

Mach-O
拡張子なし、.o.dylib
種別バイナリ実行可能オブジェクト共有ライブラリコアダンプ

複数アーキテクチャバイナリを保持する事が可能である。(ファットバイナリ)

以下のような構造になっている。

FatHeader
アーキテクチャの数を含む。なくてもよい。
fat_arch
FatHeaderの後に続く。CPUの種類などをふくむ。FatHeaderがある場合のみ存在する。
MachHeader
CPUの種類、ファイルの種類、ロードコマンドの数を含む。
ロードコマンド
MachHeaderの後にロードコマンドがいくつか続く。これはセグメントの情報や実行されるときのレジスタの初期値を指定する。

実行ファイルとして体をなすにはロードコマンドは少なくともセグメントコマンドとスレッドコマンドが必要である。

Carbonアプリケーションではオブジェクトファイル・実行ファイルのフォーマットとしてPreferred Executable Format (PEF) とMach-Oの双方を利用できるが、macOSの機能を利用するにはMach-Oが最も適する。