lipo(1) [opendarwin man page]
LIPO(1) General Commands Manual LIPO(1) NAME
lipo - create or operate on fat files SYNOPSIS
lipo [-info] [-detailed_info] [-arch arch_type input_file] ... [ input_file] ... [-create] [-thin arch_type] [-replace arch_type file- name] ... [-remove arch_type] ... [-extract arch_type] ... [-extract_family arch_type] ... [-output output_file] [-segalign arch_type value] ... DESCRIPTION
The lipo command creates or operates on ``fat'' (multi-architecture) files. It only ever produces one output file, and never alters the input file. The operations that lipo performs are: listing the architecture types in a fat file; creating a single fat file from one or more input files; thinning out a single fat file to one specified architecture type; and extracting, replacing, and/or removing architec- tures types from the input file to create a single new fat output file. Only one option can be specified, with the exception of -arch, -output, and -segalign, which are used in combination with other options. The input_file argument is required, and only the -create option allows more than one input_file to be specified. The -output flag must be used, except with the -info and -detailed_info flags. The arch_type arguments may be any of the supported architecture names listed in the man page arch(3)exceptforVAXandMips. OPTIONS
-info Briefly list the architecture types in the input fat file (just the names of each architecture). -detailed_info Display a detailed list of the architecture types in the input fat file (all the the information in the fat header, for each archi- tecture in the file). -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 fat file, or some other file whose architecture(s) lipo can figure out. -output output_file Specifies its argument to be the output file. -create Take the input files (or file) and create one fat output file from them. -thin arch_type Take one input file and create a thin output file with the specified arch_type. -replace arch_type file_name Take one fat input file; in the output file, replace the arch_type contents of the input file with the contents of the specified file_name. -remove arch_type Take one fat input file and remove the arch_type from that fat file, placing the result in the output file. -extract arch_type Take one fat input file and copy the arch_type from that fat file into a fat output file containing only that architecture. -extract_family arch_type Take one fat input file and copy all of the arch_types for the family that arch_type is in from that fat file into an output file containing only those architectures. The file will be thin if only one architecture is found or fat otherwise. -segalign arch_type value Set the segment alignment of the specified arch_type when creating a fat 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 (cur- rently 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). SEE ALSO
arch(3) Apple Computer, Inc. October 23, 1997 LIPO(1)
Check Out this Related Man Page
LIBTOOL(1) General Commands Manual LIBTOOL(1) NAME
libtool - create libraries ranlib - add or update the table of contents of archive libraries SYNOPSIS
libtool -static -o output [ -sacLT ] [ - ] [ -arch_only arch_type ] file... [-filelist listfile[,dirname]] libtool -dynamic -o output [ -install_name name ] [ -compatibility_version number ] [ -current_version number ] [ link editor flags ] [ -v ] [ -noall_load ] [ - ] [ -arch_only arch_type ] file... [-filelist listfile[,dirname]] ranlib [ -sactfLT ] [ - ] archive... DESCRIPTION
The libtool command takes the specified input object files and creates a library for use with the link editor, ld(1). The library's name is specified by output (the argument to the -o flag). The input object files may be in any correct format that contains object files (``fat'' files, archives, object files). Libtool will not put any non-object input file into the output library (unlike ranlib, which allows this in the archives it operates on). When producing a ``fat'' file from objects of the same CPU type and differing CPU subtypes, libtool and ranlib create at most one library for each CPU type, rather than a separate library in a fat file for each of the unique pairings of CPU type and CPU subtype. Thus, the resulting CPU subtype for each library is the _ALL CPU subtype for that CPU type. This strategy strongly encourages the implementor of a library to create one library that chooses optimum code to run at run time, rather than at link time. Libtool can create either dynamically linked shared libraries, with -dynamic, or statically linked (archive) libraries, with -static. DYNAMICALLY LINKED SHARED LIBRARIES
Dynamically linked libraries, unlike statically linked libraries, are Mach-O format files and not ar(5) format files. Dynamically linked libraries have two restrictions: No symbol may be defined in more than one object file and no common symbol can be used. To maximize shar- ing of a dynamically linked shared library the objects should be compiled with the -dynamic flag of cc(1) to produce indirect undefined references and position-independent code. To build a dynamically linked library, libtool, runs the link editor, ld(1), with -dylib once for each architecutre present in the input objects and then lipo(1) to create a fat file if needed. ARCHIVE (or statically linked) LIBRARIES Libtool with -static is intended to replace ar(5) and ranlib. For backward compatibility, ranlib is still available, and it supports fat files. Ranlib adds or updates the table of contents to each archive so it can be linked by the link editor, ld(1). The table of contents is an archive member at the beginning of the archive that indicates which symbols are defined in which library members. Because ranlib rewrites the archive, sufficient temporary file space must be available in the file system that contains the current directory. Ranlib takes all correct forms of libraries (fat files containing archives, and simple archives) and updates the table of contents for all ar- chives in the file. Ranlib also takes one common incorrect form of archive, an archive whose members are fat object files, adding or updating the table of contents and producing the library in correct form (a fat file containing multiple archives). The archive member name for a table of contents begins with ``__.SYMDEF''. Currently, there are two types of table of contents produced by libtool -static and ranlib and understood by the link editor, ld(1). These are explained below, under the -s and -a options. OPTIONS
The following options pertain to libtool only. -static Produce a statically linked (archive) library from the input files. This is the default. -dynamic Produce a dynamically linked shared library from the input files. -install_name name ror a dynamic shared library this specifies the file name the library will be installed in for programs that use it. If this is not specified the name specified by the -o output option will be used. -compatibility_version number For a dynamic shared library this specifies the compatibility version number of the library. When a library is used the compatibil- ity version is checked and if the user's version is greater that the library's version, an error message is printed and the using program exits. The format of number is X[.Y[.Z]] where X must be a positive non-zero number less than or equal to 65535, and .Y and .Z are optional and if present must be non-negative numbers less than or equal to 255. If this is not specified then it has a value of 0 and no checking is done when the library is used. -current_version number For dynamic shared library files this specifies the current version number of the library. The program using the library can obtain the current version of the library programmatically to determine exactly which version of the library it is using. The format of number is X[.Y[.Z]] where X must be a positive non-zero number less than or equal to 65535, and .Y and .Z are optional and if present must be non-negative numbers less than or equal to 255. If this is not specified then it has a value of 0. -noall_load For dynamic shared library files this specifies the the default behavior of loading all members of archives on the command line is not to be done. This option is used by the GNU compiler driver, cc(1), when used with it's -dynamiclib option. This is done to allow selective loading of the GNU's compiler's runtime support library, libcc_dynamic.a . link editor flags For a dynamic shared library the following ld(1) flags are accepted and passed through: -lx, -weak-lx, -search_paths_first -weak_library, -Ldir, -ysym, -usym, -initsym, -idefinition:indirect, -seg1addr, -segs_read_only_addr, -segs_read_write_addr, -seg_addr_table, -seg_addr_table_filename, -segprot, -segalign, -sectcreate, -sectorder, -sectorder_detail, -sectalign, -undefined, -read_only_relocs, -prebind, -prebind_all_twolevel_modules, -noprebind, -framework, -weak_framework, -umbrella, -allowable_client, -sub_umbrella, -sub_library, -F, -U, -Y, -Sn, -Si, -S, -X, -x, -whyload, -all_load. -arch_errors_fatal, -dylib_file, -run_init_lazily, -final_output, -multiply_defined, -multiply_defined_unused, -twolevel_namespace, -twolevel_namespace_hints, -flat_namespace, -nomultidefs, -headerpad, -headerpad_max_install_names, -weak_reference_mismatches, -M, -no_arch_warnings, -sin- gle_module, -multi_module, -exported_symbols_list, -unexported_symbols_list, -m. See the ld(1) man page for details on these flags. The flag -image_base is a synonym for -seg1addr. -v Verbose mode, which prints the ld(1) commands and lipo(1) commands executed. -filelist listfile[,dirname] The listfile contains a list of file names and is an alternative way of specifiying file names on the command line. The file names are listed one per line separated only by newlines (spaces and tabs are assumed to be part of the file name). If the optional directory name, dirname is specified then it is prepended to each name in the list file. -arch_only arch_type This option causes libtool to build a library only for the specified arch_type and ignores all other architectures in the input files. When building a dynamic library, if this is specified with a specific cpusubtype other than the family cpusubtype then libtool it does not use the ld(1) -force_cpusubtype_ALL flag and passes the -arch_only argument to ld(1) as the -arch flag so that the output is tagged with that cpusubtype. The following options pertain to the table of contents for an archive library, and apply to both libtool -static and ranlib: -s Produce the preferred type of table of contents, which results in faster link editing when linking with the archive. The order of the table of contents is sorted by symbol name. The library member name of this type of table of contents is ``__.SYMDEF SORTED''. This type of table of contents can only be produced when the library does not have multiple members that define the same symbol. This is the default. -a Produce the original type of table of contents, whose order is based on the order of the members in the archive. The library member name of this type of table of contents is ``__.SYMDEF''. This type of table of contents must be used when the library has multiple members that define the same symbol. -c Include common symbols as definitions with respect to the table of contents. This is seldom the intended behavior for linking from a library, as it forces the linking of a library member just because it uses an uninitialized global that is undefined at that point in the linking. This option is included only because this was the original behavior of ranlib. This option is not the default. -L Use the 4.4bsd archive extended format #1, which allows archive member names to be longer than 16 characters and have spaces in their names. This option is the default. -T Truncate archive member names to 16 characters and don't use the 4.4bsd extended format #1. This option is not the default. -f Warns when the output archive is fat and ar(1) will no longer be able to operate on it. For compatibility, the following ranlib option is accepted (but ignored): -t This option used to request that ranlib only ``touch'' the archives instead of modifying them. The option is now ignored, and the table of contents is rebuilt. One other option applies to both libtool and ranlib: - Treat all remaining arguments as names of files (or archives) and not as options. SEE ALSO
ld(1), ar(1), otool(1), make(1), redo_prebinding(1), ar(5) BUGS
With the way libraries used to be created, errors were possible if the library was modified with ar(1) and the table of contents was not updated by rerunning ranlib(1). Thus the link editor, ld, warns when the modification date of a library is more recent than the creation date of its table of contents. Unfortunately, this means that you get the warning even if you only copy the library. Apple Computer, Inc. July 11, 2003 LIBTOOL(1)