|Using the GNU Compiler Collection (GCC)|
FSF GCC on Darwin does not create “fat” object files; it will create an object file for the single architecture that it was built to target. Apple's GCC on Darwin does create “fat” files if multiple -arch options are used; it does so by running the compiler or linker multiple times and joining the results together with lipo.
The subtype of the file created (like ‘ppc7400’ or ‘ppc970’ or ‘i686’) is determined by the flags that specify the ISA that GCC is targetting, like -mcpu or -march. The -force_cpusubtype_ALL option can be used to override this.
The Darwin tools vary in their behavior when presented with an ISA mismatch. The assembler, as, will only permit instructions to be used that are valid for the subtype of the file it is generating, so you cannot put 64-bit instructions in a ‘ppc750’ object file. The linker for shared libraries, /usr/bin/libtool, will fail and print an error if asked to create a shared library with a less restrictive subtype than its input files (for instance, trying to put a ‘ppc970’ object file in a ‘ppc7400’ library). The linker for executables, ld, will quietly give the executable the most restrictive subtype of any of its input files.
A framework directory is a directory with frameworks in it. A
framework is a directory with a ‘"Headers"’ and/or
‘"PrivateHeaders"’ directory contained directly in it that ends
in ‘".framework"’. The name of a framework is the name of this
directory excluding the ‘".framework"’. Headers associated with
the framework are found in one of those two directories, with
‘"Headers"’ being searched first. A subframework is a framework
directory that is in a framework's ‘"Frameworks"’ directory.
Includes of subframework headers can only appear in a header of a
framework that contains the subframework, or in a sibling subframework
header. Two subframeworks are siblings if they occur in the same
framework. A subframework should not have the same name as a
framework, a warning will be issued if this is violated. Currently a
subframework cannot have subframeworks, in the future, the mechanism
may be extended to support this. The standard frameworks can be found
in ‘"/System/Library/Frameworks"’ and
‘"/Library/Frameworks"’. An example include looks like
#include <Framework/header.h>, where ‘Framework’ denotes
the name of the framework and header.h is found in the
‘"PrivateHeaders"’ or ‘"Headers"’ directory.
If the compiler was built to use the system's headers by default,
then the default for this option is the system version on which the
compiler is running, otherwise the default is to make choices that
are compatible with as many systems and code bases as possible.
Warning: The -mone-byte-bool switch causes GCC
to generate code that is not binary compatible with code generated
without that switch. Using this switch may require recompiling all
other modules in a program, including system libraries. Use this
switch to conform to a non-default data model.
.ofiles into already running programs. -findirect-data and -ffix-and-continue are provided for backwards compatibility.