lipo - create or operate on universal files
lipo input_file command [option...]
The lipo tool creates or operates on ``universal'' (multi-architecture)
files. Generally, lipo reads a single input file and writes to a single
output file, although some commands and options accept multiple input files.
lipo will only ever write to a single output file, and input files are
never modified in place.
lipo supports a number of commands for creating universal
files from single-architecture files, extracting single-architecture files
from universal files, and displaying architecture information. lipo
can only perform one such command at a time, although some command flags may
appear more than once. Some commands support additional options that can be
used with that command. In addition, there are global options that are
supported by multiple commands.
The arch_type arguments may be any of the supported
architecture names listed in the man page arch(3).
- Display only the architecture names present in a single input file. Each
architecture name is a single word, making this option suitable for shell
scripting. Unknown architectures will be represented by
"unknown" along with the numeric CPU type and CPU subtype values
as a single word.
- Create one universal output file from one or more input files. When input
files specified on the command-line, all of the architectures in each file
will be copied into the output file, whereas when input files are included
using the global -arch option, only the specified architecture will
be copied from that input file. This command requires the -output
- Display a detailed list of the architecture types in the input universal
file (all the the information in the universal header, for each
architecture in the file).
- -extract arch_type [-extract arch_type...]
- Take one universal input file and copy the arch_type from that
universal file into a universal output file containing only that
architecture. This command requires the -output option.
- -extract_family arch_type [-extract_family
- Take one universal input file and copy all of the arch_types for
the family that arch_type is in from that universal file into an
output file containing only those architectures. The file will be thin if
only one architecture is found or universal otherwise. This command
requires the -output option.
- Display a brief description of each input file along with the names of
each architecture type in that input file.
- -remove arch_type [-remove arch_type ...]
- Take one universal input file and remove the arch_type from that
universal file, placing the result in the output file. This command
requires the -output option.
- -replace arch_type file_name [-replace arch_type
- Take one universal input file; in the output file, replace the
arch_type contents of the input file with the contents of the
specified file_name. This command requires the -output
- -thin arch_type
- Take one input file and create a thin output file with the specified
arch_type. This command requires the -output option.
- -verify_arch arch_type ...
- Take one input file and verify the specified arch_types are present
in the file. If so then exit with a status of 0 else exit with a status of
1. Because more than one arch_type can be verified at once, all of
the input files must appear before the -verify_arch flag on the
- -arch arch_type input_file
- Tells lipo that input_file contains the specified
architecture type. The -arch arch_type specification is
unnecessary if input_file is an object file, a universal file, or
some other file whose architecture(s) lipo can figure out.
- When creating a universal binary including both 32-bit and 64-bit ARM
files, this option will ask lipo to add the 64-bit files at the end
and not include them in the count of architectures present in the file.
The files must be executable files (Mach-O filetype MH_EXECUTE). This
option has no effect if neither 32-bit ARM nor 64-bit ARM files are
present, and no other files may be hidden in this way. This option only
works with the -create, -remove, and -replace,
commands, and is only intended for tools and workflows testing a
workaround on older systems.
- -output output_file
- Commands that create new files write to the output file specified by the
-output flag. This option is required for the -create,
-extract, -extract_family, -remove, -replace,
and -thin commands.
- -segalign arch_type value
- Set the segment alignment of the specified arch_type when creating
a universal file containing that architecture. value is a
hexadecimal number that must be an integral power of 2. This is only
needed when lipo can't figure out the alignment of an input file
(currently not an object file), or when it guesses at the alignment too
conservatively. The default for files unknown to lipo is 0 (2^0, or
an alignment of one byte), and the default alignment for archives is 4
(2^2, or 4-byte alignment).