NAME
CC - Sun WorkShop C++ Compiler 5.0
SYNOPSIS
CC [-386] [-486] [-a] [-B(dynamic|static)] [-c]
[-cg(89|92)] [-compat[=(4|5)]] [+d] [-Dname[=def]]
[-d(y|n)] [-dalign] [-dryrun] [-E] [+e(0|1)] [-fast]
[-features=a] [-flags] [-fnonstd] [-fns[=(yes|no)]]
[-fprecision=p] [-fround=r] [-fsimple[=n]] [-fstore]
[-ftrap=t] [-G] [-g] [-g0] [-H] [-h name] [-help] [-i]
[-I dir] [-inline=rlst] [-instances=i] [-keeptmp]
[-KPIC] [-Kpic] [-Ldir] [-llib] [-libmieee] [-libmil]
[-library=lib] [-migration] [-misalign] [-mt] [-native]
[-noex] [-nofstore] [-nolib] [-nolibmil] [-noqueue]
[-norunpath] [-O[n]] [-o file] [+p] [-P] [-p] [-pen-
tium] [-pg] [-PIC] [-pic] [-pta] [-ptidir] [-pto]
[-ptrdir] [-ptv] [(-Qoption|-qoption) phase option
[(-Qproduce|-qproduce) type [-qp] [-Rpath] [-readme]
[-S] [-s] [-sb] [-sbfast] [-staticlib=lib] [-temp=dir]
[-template=w] [-time] [-Uname] [-unroll=n] [-V] [-v]
[-vdelx] [-verbose=v] [+w] [+w2] [-w] [-xa] [-xar]
[-xarch=a] [-xcache=c] [-xcg(89|92)] [-xchip=c]
[-xcode=v] [-xF] [-xhelp=(flags|readme)]
[-xild(off|on)] [-xinline=rlst] [-xlibmieee]
[-xlic_lib=lib] [-xlicinfo] [-Xm] [-xM] [-xM1]
[-xMerge] [-xnolib] [-xnolibmil] [-xnolibmopt] [-xO[n]]
[-xpg] [-xprefetch[=(yes|no)]] [-xprofile=p] [-xregs=r]
[-xs] [-xsb] [-xsbfast] [-xspace] [-xtarget=t] [-xtime]
[-xunroll=n] [-xwe] [-ztext] [file] ...
Release 5.0
This release supports standard C++ and SPARC v9.
Be sure to read the C++ README file by using the command:
CC -xhelp=readme
DESCRIPTION
CC converts C++ and assembly source files to object files,
and links object files and libraries into executable pro-
grams.
Programs containing C++ objects must be linked with CC.
CC takes arguments ending in .c, .C, .cc, .cxx, .cpp, or .i
to be C++ source programs. The .i files are presumed to be
preprocessed files. Arguments ending in .s are presumed to
be assembly source files Arguments ending in .o are presumed
to be object files.
Files whose names do not end with the above suffixes are
treated as object programs or libraries and are handed over
to the link editor. Unless -c, -S, -E, or -P is specified,
these programs and libraries, together with the results of
any specified compilations or assemblies, are linked in the
order given to produce an output file named a.out. You can
specify a name for the executable by using the -o option.
If a single file is compiled and linked all at once, the
intermediate files are deleted.
The Incremental Link Editor (iilldd) is sometimes used in place
of linker lldd for incremental linking. See -xildon and -xild-
off for more information.
Before you use the CC command, insert the name of the direc-
tory in which you have chosen to install the C++ compilation
system at the beginning of your search path. For instruc-
tions on setting your search path, see the csh(1) or the
sh(1) man page.
COMPILING FOR 64-BIT SOLARIS 7:
This version of the compiler can produce 64-bit object
binaries on 32-bit or 64-bit Solaris 7 SPARC Platform Edi-
tion. The resulting executable will run only on 64-bit
SPARC or UltraSPARC processors under Solaris 7 with the 64-
bit kernel. Compilation, linking, and execution of 64-bit
objects can only take place in a Solaris 7 environment.
Compiling for 64-bit Solaris 7 is indicated by the -xarch=v9
and -xarch=v9a options. Note that one of these options must
be specified even if -xtarget or -fast are also specified.
In such a case, the -xarch=v9 or -xarch=v9a option must
appear AFTER any -xtarget or other option that sets For
example:
-xtarget=ultra -xarch=v9
Note that -xtarget=ultra and -xtarget=ultra2 imply -xarch=v8
and do not automatically signal -xarch=v9 or -xarch=v9a.
When building shared dynamic libraries with -xarch=v9 or v9a
on 64-bit Solaris 7, the -Kpic or -KPIC option MUST ALSO be
specified.
See also the new -xcode=abs32|abs64|pic13|pic32 option for
specifying code address forms.
64-bit Solaris 7 not only enables 64-bit integer and pointer
data, but also support for large files and large arrays. For
more details, see the README file:
<install directory> /SUNWspro/READMEs/64bit_Compilers
(where <install-directory> is usually /opt in a standard
install. )
For general information on 64-bit Solaris for software
developers, see the "Solaris 7 64-bit Developer's Guide" in
AnswerBook2.
OPTIONS
For a complete description of the C++ compiler options,
including examples, see the C++ User's Guide.
CC accepts the following options:
-386 (x86) Use -xtarget=386.
-486 (x86) Use -xtarget=486.
-a Use -xa.
See also the tcov(1) man page.
-Bbinding Specifies whether library bindings for linking are
dynamic (shared) or static (nonshared). The
values for binding are static and dynamic.
-Bdynamic is the default. You can use the -B
option to toggle several times on a command-line.
For more information on the -Bbinding option, see
the ld(1) man page and the Solaris documentation.
-Bdynamic-Directs the link editor to look for
liblib.so files. Use this option if you want
shared library bindings for linking. If the
liblib.so files are not found, it looks for
liblib.a files.
-Bstatic - Directs the link editor to look only
for files named lliibblib..aa. The .a suffix indicates
that the file is static, that is, nonshared. Use
this option if you want nonshared library bindings
for linking.
This option and its arguments are passed to the
linker, ld. If you compile and link in separate
steps, and use -Bbinding on the command line, you
must use it in the link step as well.
-c Directs the CC driver to suppress linking with ld
and produces a .o file for each source file. If
you specify only one source file on the command-
line, then you can explicitly name the object file
with the -o option. For example:
o If you enter CC -c x.cc, the object file, x.o,
is generated.
o If you enter CC -c x.cc -o y.o, the object
file, y.o, is generated.
See also -o filename.
-cg(89|92)
Use -xcg(89|92). See also -xtarget=native.
-compat[=(4|5)]
Sets the compiler to be compatible with 4.0.1,
4.1, and 4.2 compilers; or with full 5.0. This
option controls the preprocessor __cplusplus
macro.
The C++ compiler has two principal modes. One
accepts the semantics and language defined by the
Annotated C++ Reference Manual (ARM) and used in
the 4.2 compiler (the compatibility mode, -com-
pat=4). The other accepts constructs according to
the ANSI/ISO standard (standards mode, -compat=5).
These two modes are incompatible with each other
because the ANSI/ISO standard forces significant,
incompatible changes in name mangling, vtable lay-
out, and other ABI details. These two modes are
differentiated by the -compat option as shown in
the following values.
Value Meaning
-compat=4 Compile for compatibility with C++
4.0.1, C++ 4.1, and C++ 4.2 (Sets
__cplusplus macro to 1.)
-compat=5 Compile with full C++ 5.0 features.
(Sets __cplusplus macro to
199711L.)
Defaults:
If the -compat option is not specified, -compat=5
is assumed. If only -compat is specified, -com-
pat=4 is assumed.
Interactions:
The -xarch=v9 option and the -compat[=4] option
are not supported when used together.
+d Prevents the compiler from expanding C++ inline
functions. This option is turned on when you
specify -g, the debugging option.
The debugging option, -g0, does not turn on +d.
See -g0.
Warning:
For large programs that rely heavily on inline
functions, the amount of additional code generated
may be substantial.
-Dname[=def]
Defines a macro symbol name to the preprocessor.
Doing so is equivalent to including a #define
directive at the beginning of the source. If you
do not use =def, name is defined as 1. You can
use multiple -D options.
The following values are predefined:
SPARC and x86:
__BUILTIN_VA_ARG_INCR
__cplusplus
__DATE__
__FILE__
__LINE__
__STDC__
__SVR4
__SUNPRO_CC = 0x500
__SUNPRO_CC_COMPAT = 4 or 5
__sun
sun
__TIME__
__`uname -s`_`uname -r` (replacing invalid charac-
ters with underscores, for example: -D__SunOS_5_3,
-D__SunOS_5_4)
__unix
unix
_WCHAR_T
__ARRAYNEW if the "array" forms of operators new
and delete are enabled (see "-
features=[no%]arraynew")
_BOOL if type bool is enabled (see "-
features=[no%]bool")
SPARC only:
__sparc
sparc (32-bit compilation modes only)
SPARC V9 only:
__sparcv9 (64-bit compilation modes only)
x86 only:
__i386
i386
Defaults: If you do not use [=def], name is
defined as 1. Warnings: If +p is used, sun,
unix, sparc and i386 are not defined.
-d(y|n) Allows or disallows dynamic libraries for the
entire executable.
-dy specifies dynamic linking, which is the
default, in the link editor.
-dn specifies static linking in the link editor.
This option and its arguments are passed to ld.
Warning: If you compile and link in separate
steps, and use -dn|dy in the compile command, you
must use -dn|dy in the link step as well.
-dalign (SPARC) Generates double-word load and store
instructions whenever possible for improved per-
formance. This option assumes that all double-
typed data are double-word-aligned. If you com-
pile one unit with -dalign, compile all units of a
program with -dalign, or you might get unexpected
results.
-dryrun Displays what options the driver has passed to the
compiler. This option directs the driver CC to
show, but not execute, the commands constructed by
the compilation driver.
-E Directs the CC driver to run only the preprocessor
on C++ source files, and to send the result to
stdout (standard output). No compilation is done;
no .o files are generated. Output from this
option is not supported as input to the C++ com-
piler when templates are used.
+e(0|1) Controls virtual table generation. Invalid and
ignored in compat=5 mode. Values:
o +e0 suppresses the generation of virtual tables,
and creates external references to those that
are needed.
o +e1 creates virtual tables for all defined
classes with virtual functions.
-fast Selects a combination of compilation options for
optimum execution speed. This option provides near
maximum performance for most applications by
expanding the following compilation options:
-dalign (SPARC only)
-fns (SPARC)
-fsimple (SPARC only)
-ftrap=%none (SPARC, x86)
-xlibmil (SPARC, x86)
-nofstore (x86 only)
-xO4 (SPARC, x86)
-xlibmopt (SPARC, x86 only)
-xtarget=native (SPARC, x86)
Interactions:
If you combine -fast with other compilation
options, the -dalign option applies; see the
description for -dalign.
The code generation option, the optimization
level, and use of inline template files can be
overridden by subsequent flags. For example,
although the optimization level set by -fast is
-xO4, if you specify -fast -xO3, the optimization
level becomes -xO3. The optimization level that
you specify will override a previously set optimi-
zation level.
Warnings:
Do not use this option for programs that depend on
IEEE standard floating-point exception handling;
different numerical results, premature program
termination, or unexpected SIGFPE signals might
occur.
Note-The criteria for the -fast option vary with
the Sun C, C++, FORTRAN 77, and Pascal compilers.
Please see the appropriate documentation for the
specifics.
The -fast option includes -fns -ftrap=%none; that
is, this option turns off all trapping. In previ-
ous SPARC releases, the -fast macro option
included -fnonstd, now it does not.
See the Numerical Computation Guide, ieee_sun(3m).
-features=a
Enables/disables various C++ language features.
The following flags are valid for both -compat=4
and -compat=5 unless otherwise specified.
Value Meaning
[no%]altspell [Do not] Recognize alternative
token spellings (for example, "and"
for "&&").
[no%]anachronisms
[Do not] Allow anachronistic con-
structs.
[no%]arraynew (-compat=4 only) [Do not] Recognize
array forms of operator new and
operator delete (for example,
operator new[] (void*) ). When
enabled, the macro __ARRAYNEW = 1.
When not enabled, the macro is not
defined. For details on the use of
this flag with -compat=5, see the
Migration Guide.
[no%]bool [Do not] Allow the bool type and
literals. When enabled, the macro
_BOOL = 1. When disabled, the macro
is not defined.
[no%]conststrings
[Do not] Put literal strings in
Read-Only memory.
[no%]except [Do not] Allow C++ exceptions.
[no%]explicit [Do not] Recognize the keyword
explicit.
[no%]export [Do not] Recognize the keyword
export.
[no%]iddollar [Do not] Allow a $ as a non-initial
identifier character.
[no%]localfor [Do not] Use new local-scope rules
for the for statement.
[no%]mutable [Do not] Recognize the keyword mut-
able.
[no%]namespace (-compat=4 only) [Do not] Recognize
keywords namespace, using.
[no%]rtti (-compat=4 only) [Do not] Allow
runtime type identification (RTTI).
Defaults: If -features is not specified, the fol-
lowing is assumed for -compat=4: -features=%none,
anachronisms, except, longlong, transitions.
If -features is not specified, the following is
assumed for -compat=5:
-features=%all,no%iddollar.
-flags Displays a brief description of each compiler
flag. Also displayed are: phone numbers to call
to obtain additional information on Sun products
and for technical support. (This option is the
same as -help.)
-fnonstd (x86) Causes nonstandard initialization of
floating-point arithmetic hardware.
In addition, this option causes hardware traps to
be enabled for floating-point overflow, division
by zero, and invalid operations exceptions.
These results are converted into SIGFPE signals.
If the program has no SIGFPE handler, it ter-
minates with a memory dump (unless you limit the
core dump size to 0).
Default: If -fnonstd is not specified, IEEE 754
floating-point arithmetic exceptions do not abort
the program, and underflows are gradual.
See the Numerical Computation Guide for more
information.
-fns[=(no|yes)]
(SPARC) Selects SPARC non-standard floating-point
mode.
Default: Without this flag, the nonstandard float-
ing point mode is not enabled automatically. Stan-
dard IEEE 754 floating-point computation takes
place, that is, underflows are gradual.
This flag causes the nonstandard floating-point
mode to be enabled when a program begins execu-
tion.
On some SPARC platforms, the nonstandard
floating-point mode disables "gradual underflow,"
causing tiny results to be flushed to zero rather
than to produce subnormal numbers. It also causes
subnormal operands to be silently replaced by
zero.
On those SPARC platforms that do not support gra-
dual underflow and subnormal numbers in hardware,
use of this option can significantly improve the
performance of some programs.
Optional use of =yes or =no provides a way of tog-
gling the -fns flag following some other macro
flag that includes -fns, such as -fast.
-fns is the same as -fns=yes.
-fns=yes selects non-standard floating point.
-fns=no selects standard floating point.
Warnings:
When nonstandard mode is enabled, floating-point
arithmetic may produce results that do not conform
to the requirements of the IEEE 754 standard.
This option is effective only on SPARC platforms
and only if used when compiling the main program.
On x86 systems, the option is ignored.
If you compile one routine with -fns, then compile
all routines of the program with the -fns option;
otherwise you can get unexpected results.
-fprecision=p
(x86) Sets floating-point rounding precision mode.
p must be one of: single, double, extended.
The -fprecision flag sets the rounding precision
mode bits in the Floating Point Control Word.
These bits control the precision to which the
results of basic arithmetic operations (add, sub-
tract, multiply, divide, and square root) are
rounded.
The following table shows the meanings of the
values of p:
Value Meaning
single Rounds to an IEEE single-precision value
double Rounds to an IEEE double-precision value
extended Rounds to the maximum precision avail-
able
When p is single or double, this flag causes the
rounding precision mode to be set to single or
double precision, respectively, when a program
begins execution. When p is extended or the -fpre-
cision flag is not used, the rounding precision
mode remains as the extended precision.
The single precision rounding mode causes results
to be rounded to 24 significant bits, and double
precision rounding mode causes results to be
rounded to 53 significant bits. In the default
extended precision mode, results are rounded to 64
significant bits. This mode controls only the pre-
cision to which results in registers are rounded,
and it does not affect the range. All results in
register are rounded using the full range of the
extended double format. Results that are stored in
memory are rounded to both the range and precision
of the destination format.
The nominal precision of the float type is single.
The nominal precision of the long double type is
extended.
Defaults:
When the -fprecision flag is not specified, the
rounding precision mode defaults to extended.
Warnings:
This option is effective only on x86 devices and
only if used when compiling the main program. On
SPARC devices, this option is ignored.
-fround=r Sets the IEEE rounding mode in effect at startup.
r must be one of: nearest, tozero, negative,
positive.
Value Meaning
nearest Rounds towards the nearest number and
breaking ties to even numbers.
tozero Round-to-zero.
negative Round-to-negative-infinity.
positive Round-to-positive-infinity.
Default: When the -fround option is not speci-
fied, the rounding mode defaults to
-fround=nearest.
This option sets the IEEE 754 rounding mode that:
o Can be used by the compiler in evaluating con-
stant expressions.
o Is established at runtime during the program
initialization.
function,
The meanings are the same as those for the ieee_flags
which may be used to change the mode at runtime.
If you compile one routine with -fround=r , com-
pile all routines of the program with the same
-fround=r option; otherwise, you can get unex-
pected results. This option is effective only if
used when compiling the main program.
-fsimple[=n]
Selects floating-point optimization preferences.
If n is present, it must be 0, 1 or 2.
The following table shows the -fsimple values:
Value
Meaning
0 Permits no simplifying assumptions. Preserves
strict IEEE 754 conformance.
1 Allows conservative simplification. The
resulting code does not strictly conform to
IEEE 754, but numeric results of most pro-
grams are unchanged.
With -fsimple=1 , the optimizer can assume
the following:
IEEE 754 default rounding/trapping modes
do not change after process initializa-
tion
Computation producing no visible result
other than potential floating point
exceptions might be deleted
Computation with infinities or NaNs as
operands needs to propagate NaNs to
their results; e.g., x*0 might be
replaced by 0
Computations do not depend on sign of
zero
With -fsimple=1, the optimizer is not allowed
to optimize completely without regard to
roundoff or exceptions. In particular, a
floating point computation cannot be replaced
by one that produces different results with
rounding modes held constant at runtime.
-fast implies -fsimple=1.
2 Permits aggressive floating point optimiza-
tion that may cause many programs to produce
different numeric results due to changes in
rounding. For example, permits the optimizer
to replace all computations of x/y in a given
loop with x*z, where x/y is guaranteed to be
evaluated at least once in the loop, z=1/y ,
and the values of y and z are known to have
constant values during execution of the loop.
Defaults:
If -fsimple is not designated, the compiler uses
-fsimple=0.
If -fsimple is designated but no value is given
for n, the compiler uses -fsimple=1.
Interactions: -fast implies -fsimple=1.
Warnings:
This option can break IEEE 754 conformance.
-fstore (x86) Forces precision of floating-point expres-
sions.
This option causes the compiler to convert the
value of a floating-point expression or function
to the type on the left side of an assignment -
when that expression or function is assigned to a
variable, or when that expression is cast to a
shorter floating-point type rather than leaving
the value in a register.
To turn off this option, use the -nofstore option.
Warnings:
Due to roundoffs and truncation, the results may
be different from those that are generated from
the register values.
-ftrap=t Sets the IEEE trapping mode in effect at startup.
This option sets the IEEE 754 trapping modes that
are established at program initialization, but
does not install a SIGFPE handler. You can use
ieee_handler to simultaneously enable traps and
install a SIGFPE handler. When more than one value
is used, the list is processed sequentially from
left to right.
t is a comma-separated list that consists of one
or more of the following:
Value Meaning
[no%]division [Do not] Trap on division by zero.
[no%]inexact [Do not] Trap on inexact result.
[no%]invalid [Do not] Trap on invalid operation.
[no%]overflow [Do not] Trap on overflow.
[no%]underflow [Do not] Trap on underflow.
%all Trap on all of the above.
%none Trap on none of the above.
common Trap on invalid, division by zero,
and overflow.
Note that the [no%] form of the option is used
only to modify the meanings of the %all or common
value and and must be used with one of these
values, as shown in the example. The [no%] form of
the option by itself does not explicitly cause a
particular trap to be disabled.
If you wish to enable the IEEE traps,
-ftrap=common is the recommended setting.
Defaults:
If -ftrap is not specified, the -ftrap=%none value
is assumed. (Traps will not be enabled automati-
cally.)
Examples:
When one or more terms is given, the list is pro-
cessed sequentially from left to right, thus
-ftrap=%all, no%inexact means to set all traps
except inexact.
Interactions:
The mode may be changed at runtime with
ieee_handler(3).
Warnings:
If you compile one routine with -ftrap=t, compile
all routines of the program with the same
-ftrap=t option; otherwise, you can get unexpected
results.
Use the -ftrap=inexact trap with caution, as it
will result in the trap being issued whenever a
floating-point value cannot be represented
exactly. For example, the following statement may
generate this condition:
x = 1.0 / 3.0;
This option is effective only if used when compil-
ing the main program.
-G Instructs the linker to build a dynamic shared
library instead of an executable file; see the
ld(1) man page and the C++ Library Reference. All
source files specified in the command-line are
compiled with -Kpic by default.
When building a shared library that uses tem-
plates, it is necessary in most cases to include
in the shared library those template functions
that are instantiated in the template database.
Using this option automatically adds those tem-
plates to the shared library as needed.
The following options are passed to ld if -c is
not specified:
o -dy
o -G
-g Instructs both the compiler and the linker to
prepare the file or program for debugging. The
tasks include:
o Producing more detailed information, known as
stabs, in the symbol table of the object files
and the executable
o Producing some "helper functions," which the
Debugger can call to implement some of its
features
o Disabling the inline generation of functions;
that is, using this option implies the +d option
o Disabling certain levels of optimization.
Interactions:
You can use this option along with -O for the
optimization level that you desire.
If you use this option with -xO, you will get
limited debugging information.
This option makes -xildon the default incremen-
tal linker option in order to speed up the
compile-edit-debug cycle. See the description
for -xildon and -xildoff. This option invokes
ild in place of ld unless any of the following
are true:
o The -G option is present
o The -xildoff option is present
o Any source files are named on the command line.
See also the explanations for
-g0 and +d, as well as the ld(1) man page. The
Debugging a Program with Sun WorkShop guide pro-
vides details about dbx stabs and "lazy stabs."
-g0 Instructs the compiler to prepare the file or pro-
gram for debugging, but not to disable inlining.
This option is the same as -g, except that +d is
disabled. See also the description for the +d
option.
-H On the standard error output (stderr), prints, one
per line, the path name of each #include file con-
tained in the current compilation.
-hname Assigns the name name to the generated shared
dynamic library.
This is a loader option, passed to ld. In gen-
eral, the name after -h should be exactly the same
as the one after -o. A space between the -h and
name is optional.
The compile-time loader assigns the specified name
to the shared dynamic library you are creating.
It records the name in the library file as the
intrinsic name of the library. If there is no
-hname option, then no intrinsic name is recorded
in the library file. Every executable file has a
list of needed shared library files. When the
runtime linker links the library into an execut-
able file, the linker copies the intrinsic name
from the library into that list of needed shared
library files. If there is no intrinsic name of a
shared library, then the linker copies the path of
the shared library file instead. This command-
line is an example:
% CC -G -o libx.so.1 -h libx.so.1 a.o b.o c.o
-help Use -flags.
-i Tells the linker, ld(1),
to ignore any LD_LIBRARY_PATH setting.
-Ipathname
Adds pathname to the list of directories that are
searched for #include files with relative file
names - those that do not begin with a slash. The
preprocessor searches for #include files in this
order:
1. For includes in the form #include (where quo-
tation marks are used), the directory containing
the source.
2. For includes in the form <foo.h> (where angle
brackets are used), the directory containing the
source file is not searched.
3. In the directories named with -I options, if
any.
4. In the directories for compiler-provided C++
header files:
/opt/SUNWspro/SC5.0/include/CC
for compat=5 or CC4 for compat=4; the actual path
depends on where the compiler was installed.
5. In the directories for compiler-provided ANSI
C header files:
/opt/SUNWspro/SC5.0/include/CC
for compat=5 or CC4 for compat=4; the actual path
depends on where the compiler was installed.
6. In /usr/include
Note-
If -ptipath is not used, the compiler looks
for template files in -Ipathname. It is
recommended that you use -Ipathname instead
of -ptipath.
-inline=rlst
Use -xinline=rlst.
-instances=a
Controls the placement and linkage of template
instances. The following table shows the meanings
of the values of a:
Value Meaning
extern Places all needed instances into the
template repository and gives them glo-
bal linkage. (If an instance in the
repository is out of date, it will be
reinstantiated.)
explicit Places explicitly instantiated instances
into the current object file and gives
them global linkage. Does not generate
any other needed instances.
global Places all needed instances into the
current object file and gives them glo-
bal linkage.
semiexplicit
Places explicitly instantiated instances
into the current object file and gives
them global linkage. Places all
instances needed by the explicit
instances into the current object file
and gives them static linkage. Does not
generate any other needed instances.
static Places all needed instances into the
current object file and gives them
static linkage.
Default: If instances is not specified,
-instances=extern is assumed.
Warnings:
For all values other than extern, the template
definitions must be included (directly or
indirectly) within the current compilation unit.
The compiler silently skips the instantiation if
the definition is not available.
The static and semiexplicit values may produce
invalid results. See the C++ User's Guide.
-keeptmp Retains the temporary files that are created dur-
ing compilation. Along with -verbose=diags, this
option is useful for debugging.
-KPIC (SPARC) Same as -xcode=pic32.
(x86) Same as -Kpic.
-Kpic (SPARC) Same as -xcode=pic13.
(x86) Produces position-independent code. Use this
option to compile source files when building a
shared library. Each reference to a global datum
is generated as a dereference of a pointer in the
global offset table. Each function call is gen-
erated in pc-relative addressing mode through a
procedure linkage table.
-Ldir Adds dir to the list of directories to be searched
for libraries.
This option is passed to ld. The directory, dir,
is searched before compiler-provided directories.
-llib Add library liblib.a or liblib.so to linker's list
of search libraries.
This option is passed to ld. Normal libraries
have names such as liblib.a or liblib.so where the
lib and .a or .so parts are required. You can
specify the lib part with this option. Put as many
libraries as you want on a single command line;
they are searched in the order specified with
-Ldir.
Use this option after your object file names.
-libmieee Use -xlibmieee.
-libmil Use -xlibmil.
-library=l
Incorporates specified CC-provided libraries into
compilation and linking.
If this option is specified, the proper -I paths
are set during compilation. The proper -L, -Y P,
-R paths, and -l options are set during linking.
Values:
l is a comma-separated list of library specifiers.
The following table shows the meanings of the
values for l:
For -compat=4:
Value Meaning
[no%]rwtools7
[Do not] Use Tools.h++ v7
[no%]rwtools7_dbg
[Do not] Use debug-enabled Tools.h++ v7
[no%]complex
[Do not] Use libcomplex, complex arith-
metic
[no%]libC [Do not] Use libC, C++ support
[no%]gc [Do not] Use libgc, garbage collection
[no%]gc_dbg
[Do not] Use debug-enabled libgc, gar-
bage collection
%all Use all libraries, in the order
rwtools7, complex, gc, libC
%none Use none of the above
For -compat=5:
Value Meaning
[no%]rwtools7
[Do not] Use Tools.h++ v7
[no%]rwtools7_dbg
[Do not] Use debug-enabled Tools.h++ v7
[no%]iostream
[Do not] Use libiostream, the classic
iostreams library. (If using this value,
do not use Cstd)
[no%]Cstd [Do not] Use libCstd, C++ standard
library (If using this value, do not use
iostream)
[no%]Crun [Do not] Use libCrun, C++ runtime
library
[no%]gc [Do not] Use libgc, garbage collection.
[no%]gc_dbg
[Do not] Use debug-enabled libgc, gar-
bage collection.
%all Use all libraries, in the order
%none,rwtools7,Cstd,
%none Use none of the above
Defaults: For -compat=4, if -library is not
specified,
-library=%none, libC
For -compat=5, if -library is not specified,
-library=%none,Cstd,Crun
Examples:
To link without any C++ libraries, use
CC -library=%none
To use the older classic iostreams facility rather
than the newer standard C++ library, use
CC -library=iostream,no%Cstd
To use RogueWave tools.h++ v7 libraries, use CC
-library=rwtools7
Interactions:
Only one rwtools library can be used at a time.
Only one of iostream or Cstd may be used.
Libraries are linked in the order listed above.
Programs linking neither libC nor Crun might not
use all features of the C++ language.
The specified libraries are linked after user-
specified libraries, and before system support
libraries.
Warnings:
The set of libraries is not stable and might
change from release to release.
See also:
-I,-l,-R,
C++ Library Reference, Tools.h++User'sGuide,
Tools.h++ Class Library Reference , C++ Standard
Reference Library
-migration
Displays a pointer to the C++ Migration Guide,
which contains information about incompatibilities
between versions 4.0.1, 4.1, and 4.2 of the com-
piler and the 5.0 compiler.
NOTE - This option might cease to exist in the
next release.
-misalign (SPARC) Permits misaligned data, which would oth-
erwise generate an error, in memory.
Very conservative loads and stores must be used
for the data, that is, one byte at a time. Using
this option can cause significant degradation in
peformance when you run the program.
If possible, do not link aligned and misaligned
parts of the program.
-mt Compile and link for multithreaded code.
This option compiles source files with
-D_REENTRANT and augments the set of support
libraries to include -lthread in the required
order.
This flag is required if the application or
libraries are multithreaded.
Warnings:
To ensure proper library linking order, use this
option, rather than -lthread.
See also: -xnolib.
-native Use -xtarget=native.
-noex Use -features=no%except.
-nofstore (x86) Disables forced precision of expression.
This option does not force the value of a
floating-point expression or function to the type
on the left side of an assignment but leaves the
value in a register, when that expression or func-
tion is assigned to a variable, or is cast to a
shorter floating-point type.
See also -fstore.
-nolib Use -xnolib.
-nolibmil Use -xnolibmil.
-noqueue Disables license queueing. If no license is
available, this option returns without queueing
your request and without compiling. A nonzero
status is returned for testing makefiles.
-norunpath
Does not build the path for shared libraries into
the executable.
If an executable file uses shared libraries, then
the compiler normally builds in a path that points
the runtime linker to those shared libraries. To
do so, the compiler passes the -R option to ld.
The path depends on the directory where you have
installed the compiler.
This option is helpful if you have installed the
compiler in some nonstandard location, and you
ship an executable file to your customers, who
need not work with that nonstandard location.
Interactions:
If you use any shared libraries under the compiler
installed area (default location
/opt/SUNWspro/lib) and you also use -norunpath,
then you should either use the -R option at link
time or set the environment variable
LD_LIBRARY_PATH at run time to specify the loca-
tion of the shared libraries. This will allow the
runtime linker to find the shared libraries.
-O Same as -xO2
-xO[level]
Use -xO[level].
-o filename
Sets the name of the output file (with the suffix,
.o) or the executable file to filename.
Warning: filename must have the appropriate suf-
fix for the type of file to be produced by the
compilation (see FILES). It cannot be the same
file as the source file, since the CC driver does
not overwrite the source file.
+p Use -features=no%anachronisms.
-P Only preprocesses source: does not compile. (Out-
puts a file with a .i suffix.)
This option does not include preprocessor-type
line number information in the output.
-p Prepares the object code to collect data for pro-
filing with prof. This option invokes a runtime
recording mechanism that produces a mon.out file
at normal termination.
You can also perform this task with the Analyzer.
Refer to the analyzer(1) man page.
-pentium (x86) Use -xtarget=pentium.
-pg Use -xpg.
-PIC Use -KPIC.
-pic Use -Kpic.
-pta Use -template=wholeclass.
-ptipath Specifies an additional search directory for tem-
plate source.
This option is an alternative to the normal search
path set by -Ipathname. If the -ptipath flag is
used, the compiler looks for template definition
files on this path and ignores the -Ipathname
flag.
Using
-Ipathname flag instead of -ptipath produces less
confusion.
-pto Use -instances=static.
-ptrpath Specifies the directory of the template reposi-
tory.
The template repository cache files are stored in
path/SunWS_cache. The template repository confi-
guration files are stored in
path/SunWS_config.
You cannot use multiple -ptr options.
Examples:
-ptr/tmp/Foo
specifies the repository subdirectories
/tmp/Foo/SunWS_cache and /tmp/Foo/SunWS_config.
Interactions:
The subdirectory names can be changed with the
environmental variables SUNWS_CACHE or
SUNWS_CONFIG .
Warnings:
If you use -ptr to compile, you must also use
-ptr to link.
-ptv Use -verbose=template.
-Qoption phase option
Passes the option, to the compilation phase.
To pass more than one option, specify them in
order as a comma-separated list.
The following table shows the possible values for
prog:
SPARC Architecture
x86 Architecture
ccfe ccfe
iropt cg386
cg codegen
CClink CClink
ld ld
Examples:
In the following command-line, when ld is invoked
by the CC driver, -Qoption passes the option, -i
to ld:
% CC -Qoption ld -i test.c
-qoption phase option
Use -Qoption.
-qp Same as -p.
-Qproduce sourcetype
Causes the CC driver to produce source code of the
type sourcetype. Source code types are shown in
the following table:
Value Meaning
.i Preprocessed C++ source from ccfe
.o Object file from cg, the code gen-
erator
.s Assembler source from cg
-qproduce sourcetype
Use -Qproduce.
-Rpathname
Builds dynamic library search paths into the exe-
cutable file.
Multiple instances of -Rpathname are concatenated,
with each pathname separated by a colon. Without
this option specified, the compiler passes one of
the following default search paths to the linker:
/opt/SUNWspro/lib (for standard installs)
<install_path>/lib (for non-standard installs into
<install_path>
If both the LD_RUN_PATH and the -R option are
specified, then the path from -R is scanned, and
the path from LD_RUN_PATH is ignored. This option
is passed to ld.
-readme Displays the contents of the README file. The
README file is paged by the command specified by
the environment variable, PAGER. If PAGER is not
set, the default paging command is more.
-S Compiles and generates only assembly code. This
option causes the CC driver to compile the program
and output an assembly source file, but not assem-
ble the program. The assembly source file is
named with a .s suffix.
-s Strip the symbol table from the executable file.
This option removes all symbol information from
output executable files. This option is passed to
ld.
-sb Use -xsb.
-sbfast Use -xsbfast.
-staticlib=l
Indicates which C++ libraries are to be linked
statically.
Values: The following table shows the meanings of
the values of l.
Value Meaning
[no%]library See -library for the specific
libraries.
%all Link all libraries specified in the
-library option statically.
%none Link no libraries statically.
Default:
If -staticlib is not specified, -staticlib=%none
is assumed.
Interactions:
For C++ libraries selected explicitly with the
-library option or implicitly through its
defaults, libraries specified with -staticlib are
linked statically. If a library specified with
-staticlib is not selected with -library or its
defaults, it is not linked.
Examples:
CC -staticlib=Crun
links libCrun statically because Crun is a default
value for -library.
However, CC -library=no%Cstd -staticlib=Cstd
will not link Crun at all because Crun
is not in the specified -library set.
Warnings:
This set of libraries is not stable and might
change from release to release.
-temp=dir Defines directory for temporary files.
This option sets the name of the directory for the
temporary files, generated during the compilation
process, to be dir. See also -keeptmp.
-template=w
Enables/disables various template options. The
following table shows the meaning of the value of
w:
Value Meaning
[no%]wholeclass
Directs the compiler [not] to instan-
tiate a whole template class, rather
than only those functions that are
used. This option creates a .o file
for each member of a class. You must
reference at least one member of the
class; otherwise, the compiler does
not instantiate any members for the
class.
-time Use -xtime.
-Uname Deletes command-line definition of preprocessor
symbol name.
This option affects only -D options on the command
line, including those implicitly placed there by
the CC driver. It has no effect on other
predefined macros or on macro definitions in
source files. The -U option is:
o Equivalent to putting #undef on the first line
of the first file seen by the compiler.
o The inverse of the -D option.
You can specify multiple -U options on the
command-line.
Warnings:
This option is order-sensitive if used with
the -D option, and is processed after all -D
options are processed.
-unroll=n Same as -xunroll=n.
-V Same as -verbose=version.
-v Same as -verbose=diags.
-vdelx This is an obsolete flag that will be removed in
future releases. This flag is available only for
-compat=4. Don't use this flag unless you have
bought some software from a third-party vendor and
the vendor recommends using this flag.
For expressions using delete[], this option gen-
erates a call to the runtime library function
_vector_deletex_ instead of generating a call to
_vector_delete_. The function _vector_delete_
takes two arguments: the pointer to be deleted and
the size of each array element.
The function _vector_deletex_ behaves the same as
_vector_delete_ except that it takes an addi-
tional third argument: the address of the des-
tructor for the class. This third argument is not
used by the function but is provided to be used by
third-party vendors.
Default:
The compiler generates a call to _vector_delete_
for expressions using delete[].
-verbose=v
Controls compiler verbosity. v is a comma-
separated list consisting of one or more of the
following: [no%]template, [no%]diags,
[no%]version, %all, %none. You can specify more
than one option, for example,
-verbose=template,diags The following table shows
the meanings of the values of v:
Value Meaning
[no%]template
[Do not] Turn on the verbose mode, some-
times called the verify mode. The ver-
bose mode displays each phase of instan-
tiation as it occurs during compilation.
Use this option if you are new to tem-
plates.
[no%]diags
[Do not] Print the command line for each
compilation pass.
[no%]version
[Do not) Direct the CC driver to print
the names and version numbers of the
programs it invokes.
%all Invokes all of the above.
%none Invokes none of the above.
+w Prints extra warnings where necessary.
Generates additional warnings about all question-
able constructs that are:
o Nonportable
o Likely to be mistakes
o Inefficient
Default: If +w is not specified, the compiler
warns about constructs that are almost certainly
problems.
+w2 Prints even more warnings.
-w Suppresses warning messages.
This option causes the compiler not to print warn-
ing messages. Some warnings, particularly
anachronistic ones, cannot be suppressed.
-xa Generates code for profiling.
If set at compiler time, the TCOVDIR environment
variable specifies the directory where the cover-
age (.d) files are located. If this variable is
not set, then the coverage (.d) files remain in
the same directory as the source files.
Use this option only for backward compatibility
with old coverage files. See -xprofile=tcov for
information on the new style of profiling, the
tcov (1) man page, and Profiling Tools for more
details.
Interactions:
The -xprofile=tcov and the -a options are compati-
ble in a single executable. That is, you can link
a program that contains some files that have been
compiled with -xprofile=tcov, and others that have
been compiled with -a. You cannot compile a sin-
gle file with both options.
-xa is incompatible with -g.
Warnings:
If you compile and link in separate steps, and you
compile with -xa, then be sure to link with -xa,
or you might get unexpected results.
-xar Creates archive libraries.
When building a C++ archive that uses templates,
it is necessary in most cases to include in the
archive those template functions which are instan-
tiated in the template database. Using this
option automatically adds those templates to the
archive as needed.
Example:
CC -xar -o libmain.a a.o b.o c.o
archives the template functions contained in the
library and object files.
Warnings:
Do not add .o files from the template data base on
the command line.
Do not use the ar command directly for building
archives. Use CC -xar to ensure that template
instantiations are automatically included in the
archive.
-xarch=a Specifies the target architecture set.
Although this option can be used alone, it is part
of the expansion of the -xtarget option. Its pri-
mary use is to override a value supplied by the -
xtarget option.
This option limits the instructions generated to
those of the specified architecture, and allows
the specified set of instructions. It does not
guarantee an instruction is used; however, under
optimization, it is usually used.
Values:
On SPARC platforms, must be one of: generic, v7,
v8a, v8, v8plus, v8plusa, v9, v9a.
On x86 devices, a must be one of: generic, 386,
486, pentium, pentium_pro.
SPARC architectures v7, v8a, and v8 are all binary
compatible. v8plus and v8plusa are binary compati-
ble with each other and they are forward, but not
backward, compatible.
For any particular choice, the generated execut-
able can run much more slowly on earlier architec-
tures.
The following table shows the -xarch values:
Value Meaning
generic Gets good performance on most SPARC
architectures, major degradation on
none.
This is the default. With each new
release, this best instruction set will
be adjusted, if appropriate.
v7 Limits instruction set to v7 architec-
ture.
This option uses the best instruction
set for good performance on the v7
architecture, but without the quad-
precision floating-point instructions.
This is equivalent to using the best
instruction set for good performance on
the v8 architecture, but without the
following instructions:
The quad-precision floating-point
instructions
The integer mul and div instruc-
tions
The fsmuld instruction
Examples: SPARCstation 1, SPARCstation 2
v8 Limits instruction set to v8 architec-
ture.
This option uses the best instruction
set for good performance on the v8
architecture, but without quad-
precision, floating-point instructions.
Examples: SPARCstation 10
v8a Limits instruction set to the v8a ver-
sion of the v8 architecture.
By definition, v8a means the v8 archi-
tecture but without:
The quad-precision floating-point
instructions
The fsmuld instruction
This option uses the best instruction
set for good performance on the V8a
architecture. Example: Any machine
based on MicroSPARC 1.
v8plus Limits instruction set to the V8plus
version of the V9 architecture.
By definition, V8plus means the V9
architecture, but:
Without the quad-precision
floating-point instructions
Limited to the 32-bit subset
defined by the v8plus specification
This option uses the best instruction
set for good performance on the v8plus
chip architecture.
In v8plus, a system with the 64-bit
registers of v9 runs in 32-bit
addressing mode, but the upper 32
bits of the i and l registers must
not affect program results.
This choice does not include the VIS
instructions.
Example: any machine based on UltraSPARC
Use of this option also causes the .o
file to be marked as a v8plus binary.
Such files will not run on a v7 or v8
machine.
v8plusa Limits instruction set to the v8plusa
architecture variation.
By definition, v8plusa means the v8plus
architecure plus:
The UltraSPARC-specific instruc-
tions
The VIS instructions
This option uses the best instruction
set for good performance on the
UltraSPARC TM architecture, but limited
to the 32-bit subset defined by the
v8plus specification.
Example: Any machine based on UltraSPARC
Use of this option also causes the .o
file to be marked as a Sun-specific
v8plus binary. Such files will not run
on a v7 or v8 machine.
v9 Limits instruction set to the SPARC-V9
architecture. The resulting .o object
files are in 64-bit ELF format and can
only be linked with other object files
in the same format. The resulting exe-
cutable can only be run on a 64-bit
SPARC processor running 64-bit Solaris 7
software with the 64-bit kernel. Compil-
ing with this option uses the best
instruction set for good performance on
the V9 SPARC architecture, but without
the use of quad-precision floating-point
instructions. (Available only on 64-bit
Solaris 7 software.)
v9a Limits instruction set to the SPARC-V9
architecture, adding the Visual Instruc-
tion Set (VIS) and extensions specific
to UltraSPARC processors. The resulting
.o object files are in 64-bit ELF for-
mat, and can only be linked with other
object files in the same format. The
resulting executable can only be run on
a 64-bit SPARC processor running 64-bit
Solaris 7 software with the 64-bit ker-
nel. Compiling with this option uses the
best instruction set for good perfor-
mance on the V9 UltraSPARC architecture,
but without the use of quad-precision
floating-point instructions. (Available
only on 64-bit Solaris 7 software.)
For x86 Platforms:
o generic and 386 are equivalent in this
release.
o 486 , pentium , or pentium_pro directs
the compiler to issue instructions for
the corresponding Intel chip.
Interactions:
The -xarch=v9 option and the -compat[=4]
options are not supported when used
together.
Warnings:
If this option is used with optimiza-
tion, the appropriate choice can provide
good performance of the executable on
the specified architecture. An inap-
propriate choice, however, might result
in serious degradation of performance.
-xcache=c (SPARC) Defines the cache properties for use by
the optimizer.
This option specifies the cache properties that
the optimizer can use. It does not guarantee that
any particular cache property is used.
Note - Although this option can be used alone, it
is part of the expansion of the -xtarget option;
its primary use is to override a value supplied by
the -xtarget option.
c must be one of the following:
o generic
o s1/l1/a1
o s1/l1/a1:s2/l2/a2
o s1/l1/a1:s2/l2/a2:s3/l3/a3
That is, -xcache={generic |
s1/l1/a1[:s2/l2/a2[:s3/l3/a3]]}, where the
si/li/ai are defined as follows:
si The size of the data cache at level i, in
kilobytes
li The line size of the data cache at level i,
in bytes
ai The associativity of the data cache at level
i
For example,
i=1 designates level 1 cache properties,
s1/l1/a1.
The following table shows the -xcache values:
Value Meaning
generic Defines the cache properties for
good performance on most SPARC pro-
cessors.
This is the default value which
directs the compiler to use cache
properties for good performance on
most SPARC processors, without
major performance degradation on
any of them.
s1/l1/a1 Defines level 1 cache properties.
s1/l1/a1:s2/l2/a2
Defines levels 1 and 2 cache pro-
perties.
s1/l1/a1:s2/l2/a2:s3/l3/a3
Defines levels 1, 2, and 3 cache
properties.
Example: -xcache=16/32/4:1024/32/1 specifies
the following:
Level 1 cache has:
Level 2 cache has:
16K bytes 1024K bytes
32-byte line size
32-byte line size
4-way associativity
Direct mapping
-xcg[89|92]
(SPARC) Compiles for generic SPARC or SPARC V8
architecture.
This option specifies the code generator for
floating-point hardware on SPARC platforms
released in 1989 or 1992. Use the fpversion com-
mand to determine which floating-point hardware
you have. If you compile one procedure of a pro-
gram with this option, it does not mean that you
must compile all the procedures of the program in
the same way.
-xcg89 generates code to run on generic SPARC
architecture.
-xcg89 is a macro for -xtarget=ss2 and expands to:
-xarch=v7 -xchip=old
-xcache=64/32/1.
-xcg92 generates code to run on SPARC V8 architec-
ture.
-xcg92 is a macro for -xtarget=ss1000 and expands
to: -xarch=v8 -xchip=super
-xcache=16/64/4:1024/64/1.
-xchip=c Specifies the target processor for use by the
optimizer.
c must be one of the following:
On SPARC platforms: generic, old, super, super2,
micro, micro2, hyper, hyper2, powerup, ultra,
ultra2, ultra2i
On x86 platforms: 386, 486, pentium, pentium_pro.
Although this option can be used alone, it is part
of the expansion of the -xtarget option; its pri-
mary use is to override a value supplied by the
-xtarget option.
This option specifies timing properties by speci-
fying the target processor.
This option affects:
o The ordering of instructions, that is,
scheduling
o The way the compiler uses branches
o The instructions to use in cases where semant-
ically equivalent alternatives are available.
The -xchip values for SPARC:
Value Meaning
generic Uses timing properties for good perfor-
mance on most SPARC processors.
This is the default value that directs
the compiler to use the best timing pro-
perties for good performance on most
SPARC processors, without major perfor-
mance degradation on any of them.
old Uses timing properties of pre-SuperSPARC
TM processors.
super Uses timing properties of the SuperSPARC
chip.
super2 Uses timing properties of the SuperSPARC
II chip.
micro Uses timing properties of the MicroSPARC
TM chip.
micro2 Uses timing properties of the MicroSPARC
II chip.
hyper Uses timing properties of the HyperSPARC
TM chip.
hyper2 Uses timing properties of the HyperSPARC
II chip.
powerup Uses timing properties of the Weitek
PowerUp chip.
ultra Uses timing properties of the UltraSPARC
I chip.
ultra2 Uses timing properties of the UltraSPARC
II chip.
ultra2i Uses timing properties of the UltraSPARC
IIi chip. The following table shows the
-xchip values for x86:
The -xchip values for x86:
Value Meaning
generic Uses timing properties for good perfor-
mance on most x86 processors.
386 Uses timing properties of the Intel 386
chip.
486 Uses timing properties of the Intel 486
chip.
pentium Uses timing properties of the Intel Pen-
tium chip.
pentium_pro
Uses timing properties of the Intel Pen-
tium Pro chip.
-xcode=a (SPARC) Specifies code address space. The follow-
ing table shows the -xcode values:
Value Meaning
abs32 Generate 32-bit absolute addresses.
Code + data + bss size is limited to
2**32 bytes.
abs44 Generate 44-bit absolute addresses.
Code + data + bss size is limited to
2**44 bytes. Available only on 64-bit
architectures: -xarch=(v9|v9a)
abs64 Generate 64-bit absolute addresses.
Available only on 64-bit architectures:
-xarch=(v9|v9a)
pic13 Generate position-independent code
(small model). Equivalent to -Kpic.
Permits references to at most 2**11
unique external symbols on 32-bit archi-
tectures, 2**10 on 64-bit.
pic32 Generate position-independent code
(large model). Equivalent to -KPIC.
Permits references to at most 2**30
unique external symbols on 32-bit archi-
tectures, 2**29 on 64-bit.
Defaults:
The default is -xcode=abs32 for SPARC V8 and V7.
The default is -xcode=abs64 for SPARC and
UltraSPARC V9 (with -xcg[89|92].
Interactions:
When building shared dynamic libraries using
-xarch=v9 or v9a on 64-bit Solaris 7 software, the
-xcode=pic13 or pic32 (or -pic or -PIC ) option
MUST be specified.
-xF With -features=no%except, enables reordering of
functions by the linker.
If you compile with the -xF option, and then run
the Analyzer, you generate a map file that shows
an optimized order for the functions. The subse-
quent link to build the executable file can be
directed to use that map by using the linker
-Mmapfile option. It places each function from the
executable file into a separate section.
Reordering the subprograms in memory is useful
only when the application text page fault time is
consuming a large percentage of the application
time. Otherwise, reordering may not improve the
overall performance of the application.
Note- The -xF option will work only if you also
specify -features=no%except
The analyzer(1), debugger(1), and ld(1) man pages
provide further details on this option.
-xhelp=flags
Same as -help. Displays list of compiler options.
-xhelp=readme
Same as -readme. Displays contents of online
readme file.
-xildoff Turns off the Incremental Linker.
This option is assumed if you do not use the -g
option. It is also assumed if you do use the -G
option, or name any source file on the command
line. Override this default by using the
-xildon option.
-xildon Turns on the Incremental Linker. This option is
assumed if you use the -g option and not -G, and
do not name any source file on the command line.
Override this default by using the -xildoff
option.
-xinline=rlst
Inlines specified routines.
This option requests that the optimizer inline the
user-written routines named in the rlst list - a
comma-separated list of functions and subroutines.
Inlining is an optimization technique whereby the
compiler effectively replaces a function call with
the actual subprogram code. Inlining often pro-
vides the optimizer more opportunities to produce
efficient code.
Note - This option does not affect C++ inline
functions and is not related to the +d option.
The following restrictions apply - no warning is
issued:
o Optimization must be greater than -xO3.
o The compiler determines if actual inlining is
advantageous or safe.
o The source for the routine must be in the file
being compiled.
Examples:
% cat example.cc static int twice (int i) {
return 2*1;
} int main() {
return twice( 3 );
} % CC -compat=4 -O example.cc % nm -C a.out
| grep twice [37] | 68068| 8|FUNC |LOCL |0 |7
|twice(int) [__0FFtwicei] % CC -compat=4 -O
-xinline=__0FFtwicei example.cc
Interactions:
o If a function specified in the list is not
declared as extern C , the function name should
be mangled. You can use the nm command on the
executable file to find the mangled function
names. For functions declared as extern C , the
names are not mangled by the compiler.
o Adding the -xinline has no effect for optimi-
zation levels below -xO3. At -xO4, the optim-
izer decides which functions should be inlined,
and does so without the -xinline option being
specified. At -xO4, the compiler also attempts
to determine which functions will improve per-
formance if they are inlined. If you force
inlining of a function with -xinline, you might
actually diminish performance.
-xlibmieee
Causes libm to return IEEE 754 values for math
routines in exceptional cases. The default
behavior of libm is XPG-compliant.
-xlibmil Inlines selected library routines for optimiza-
tion.
There are inline templates for some of the libm
library routines. This option selects those inline
templates that produce the fastest executables for
the floating-point option and platform currently
being used.
Note- This option does not affect C++ inline func-
tions.
-xlibmopt Uses a library of optimized math routines.
This option uses a math routine library optimized
for performance, and usually generates faster
code. The results may be slightly different from
those produced by the normal math library. If so,
they usually differ in the last bit.
The order on the command line for this library
option is not significant.
This option is implied by the -fast option. See
also the descriptions for -fast and
-xnolibmopt.
-xlic_lib=l
Links with the Sun-supplied, licensed libraries
specified in l.
-xlicinfo Shows license server information.
This option returns the license-server name and
the user ID for each user who has a license
checked out. When you use this option, the com-
piler is not invoked, and a license is not checked
out.
Generally, with this option, no compilation is
done, and a license is not checked out. If a con-
flicting option is used, then the latest one on
the command line takes precedence, and a warning
is issued.
Examples:
Do not compile; report license information.
demo% CC -c -xlicinfo any.cc
Compile; do not report license information.
demo% CC -xlicinfo -c any.cc
-Xm Use -features=iddollar.
-xM Outputs makefile dependency information.
Example: When you compile the following code
#include <stdio.h> int main() (void) printf
("hello"); with this option: % CC -xM hello.c
The output shows the dependencies: hello.o:
hello.c
hello.o: /opt/SunWSpro/SC5.0/include/CC/stdio.h
hello.o: /usr/include/stdio.h See make(1) for
details about makefiles and dependencies.
-xM1 Generates dependency information, but excludes
/usr/include. This is the same as -xM, except
that this option does not report dependencies for
the /usr/include header files. When you compile
the same code provided with the -xM option, the
output is: hello.o: hello.c
-xMerge Merges the data segment with the text segment.
The data in the object file is read-only, and is
shared between processes, unless you link with ld
-N.
-xnolib Disables linking with default system libraries.
Normally, the C++ compiler links with several sys-
tem libraries to support C++ programs. With this
option, the -llib options to link the default sys-
tem support libraries are not passed to ld.
Normally, the compiler links with the following
libraries in the following order:
For -compat=4:
-lm -lC -lw -lthread -lcx -lc
(Use -lthread when -mt is specified; do not use
-lthread when -mt is not specified.)
For -compat=5:
-lm -lCrun -lw -lthread -lcx -lc
(Use -lthread when -mt is specified; do not use
-lthread when -mt is not specified.)
You must pass all -l options explicitly.
The order of the -l options is significant. The
-lm,-lw, and -lcx options must appear before -lc.
Examples:
For minimal compilation to meet the C application
binary interface, that is, a C++ program with only
C support required, use:
CC -library=%none -xnolib test.cc -lc
To link libm statically, into a single-threaded
application on SPARC V8 platforms, use
CC -xnolib -Bstatic -lm -Bdynamic -lw
To link libm and libw statically, and link others
dynamically:
CC -xnolib -Bstatic -lm -lw -Bdynamic
Interactions:
If you specify -xnolib, you must manually link all
required system support libraries in the given
order. You must link the system support libraries
last.
Warnings:
The set of system support libraries is not stable
and might change from release to release.
-lcx is not present in 64-bit compilation mode.
-xnolibmil
Cancels -xlibmil on command line.
Use this option with -fast to override linking
with the optimized math library.
-xnolibmopt
Does not use the math routine library.
Use this option after the -fast option on the
command-line, as in:
CC -fast -xnolibmopt ...
-xOlevel Specifies optimization level.
If -xO[level] is not specified, only a very basic
level of optimization, limited to local common
subexpression elimination and dead code analysis,
is performed. A program's performance may be sig-
nificantly improved when compiled with an optimi-
zation level than without optimization. Use of -xO
(which implies -xO2) or -fast (which implies -xO4)
is recommended for most programs.
Generally, the higher the level of optimization
with which a program is compiled, the better run-
time performance obtained. However, higher optimi-
zation levels may result in increased compilation
time and larger executable files.
There are five levels that you can use with -xO.
The following sections describe how they differ
for SPARC platforms, for x86, and for all plat-
forms. Values:
On SPARC Platforms:
If the optimizer runs out of memory, it attempts
to proceed over again at a lower level of optimi-
zation, resuming compilation of subsequent rou-
tines at the original level.
-xO-This is equivalent to -xO2.
-xO1 -Does only the minimum amount of optimization
(peephole), which is postpass assembly-level
optimization. Do not use -xO1 unless using -xO2
or -xO3 results in excessive compilation time, or
if you are running out of swap space.
-xO2 -Does basic local and global optimization,
which includes:
o Induction-variable elimination
o Local and global common subexpression elimina-
tion
o Algebraic simplification
o Copy propagation
o Constant propagation
o Loop-invariant optimization
o Register allocation
o Basic block merging
o Tail recursion elimination
o Dead-code elimination
o Tail-call elimination
o Complex-expression expansion
This level does not optimize references or defini-
tions for external or indirect variables. In gen-
eral, this level results in minimum code size.
-xO3-In addition to optimizations performed at the
-xO2 level, also optimizes references and defini-
tions for external variables. This level does not
trace the effects of pointer assignments. When
compiling either device drivers that are not prop-
erly protected by volatile, or programs that
modify external variables from within signal
handlers, use -xO2. In general, -xO3 results in
increased code size. If you are running out of
swap space, use -xO2.
-xO4-Does automatic inlining of functions con-
tained in the same file in addition to performing
-xO3 optimizations. This automatic inlining usu-
ally improves execution speed, but sometimes makes
it worse. In general, this level results in
increased code size.
-xO5-Does the highest level of optimization, suit-
able only for the small fraction of a program that
uses the largest fraction of computer time. Uses
optimization algorithms that take more compilation
time or that do not have as high a certainty of
improving execution time. Optimization at this
level is more likely to improve performance if it
is done with profile feedback. See -xprofile.
On x86 Platforms:
-xO1-Preloads arguments from memory; causes cross
jumping (tail merging), as well as the single pass
of the default optimization.
-xO2-Schedules both high- and low-level instruc-
tions, and performs improved spill analysis, loop
memory-reference elimination, register lifetime
analysis, enhanced register allocation, global
common subexpression elimination, and optimiza-
tions done by level 1.
-xO3-Performs loop strength reduction, inlining,
as well as optimization done by level 2.
-xO4-Performs architecture-specific optimization,
as well as optimization done by level 3.
-xO5-Generates the highest level of optimization.
Uses optimization algorithms that take more compi-
lation time or that do not have as high a cer-
tainty of improving execution time.
On SPARC and x86 Platforms:
In general, program execution speed depends on
level of optimization. The higher the level of
optimization, the faster the speed.
In a few cases, -xO2 may perform better than the
others, and -xO3 may outperform -xO4. Try compil-
ing with each level to see if you have one of
these rare cases.
If the optimizer runs out of memory, it tries to
recover by retrying the current procedure at a
lower level of optimization, and resumes subse-
quent procedures at the original level specified
in the -xO option.
If you optimize at -xO3 or -xO4 with very large
procedures, such as thousands of lines of code in
a single procedure, the optimizer might require an
unreasonably large amount of memory. In such
cases, performance of the machine might be
degraded.
To prevent this degradation from taking place, use
the limit command to limit the amount of virtual
memory available to a single process; see the
csh(1) man page. For example, on a machine with
32 megabytes, to limit virtual memory to 16 mega-
bytes, the command:
% limit datasize 16M,
This command causes the optimizer to recover if it
reaches 16 megabytes of data space.
This limit cannot be greater than the total avail-
able swap space of the machine, and the limit
should be small enough to permit normal use of the
machine while a large compilation is in progress.
The best setting of data size depends on the
degree of optimization requested, the amount of
real memory, and virtual memory available.
o To find the actual swap space, type: swap -1
o To find the actual real memory, type: dmesg |
grep mem
Interactions:
o Debugging with -g does not supress -xO[level],
but -xO[level] limits -g in certain ways.
o The -xO3and-xO4 options reduce the utility of
debugging so that you cannot display variables
from dbx, but you can still use dbx where command
to get a symbolic traceback.
o Adding the -xinline has no effect for optimiza-
tion levels below -xO3. At -xO4, the optimizer
decides which functions should be inlined, and
does so without the -xinline option being speci-
fied. At -xO4, the compiler also attempts to
determine which functions will improve performance
if they are inlined. If you force inlining of a
function with -xinline, you might actually dimin-
ish performance.
See also:
-fast, -xprofile=p, csh(1) man page
-xpg Compiles for profiling with the gprof profiler.
The -xpg option compiles self-profiling code to
collect data for profiling with gprof. This
option invokes a runtime recording mechanism that
produces a gmon.out file when the program normally
terminates.
Warnings: If you compile and link separately, and
you compile with -xpg, then be sure to link with
-xpg.
You can also perform this task with the Analyzer.
Refer to the analyzer(1) man page.
-xprefetch[=(yes|
(SPARC) Uses prefetch instructions on UltraSPARC
II processors.
With -xprefetch=yes, the compiler is free to
insert prefetch instructions into the code it gen-
erates. This may result in a performance improve-
ment on UltraSPARC II processors.
Defaults:
If the -xprefetch option is not specified, the
default is -xprefetch=no.
Specifying -xprefetch alone is equivalent to
-xprefetch=yes.
-xprofile=p
Collects or optimizes with runtime profiling data.
p must be collect[:name], use[:name], or tcov.
This option causes execution frequency data to be
collected and saved during execution, then the
data can be used in subsequent runs to improve
performance. This option is only valid when a
level of optimization is specified.
If compilation and linking are performed in
separate steps, the same -xprofile option must
appear on the compile as well as the link step.
Values:
collect[:name] Collects and saves execution
frequency for later use by the optimizer with
-xprofile=use. The compiler generates code to
measure statement execution frequency.
The name is the name of the program that is
being analyzed. This name is optional. If
name is not specified, a.out is assumed to be
the name of the executable.
At runtime, a program compiled with
-xprofile=collect:name will create the sub-
directory name.profile to hold the runtime
feedback information. Data is written to the
file feedback in this subdirectory. If you
run the program several times, the execution
frequency data accumulates in the feedback
file; that is, output from prior runs is not
lost.
use[:name]
Uses execution frequency data to optimize
strategically. The name is the name of the
executable that is being analyzed. This name
is optional. If name is not specified, a.out
is assumed to be the name of the executable.
The program is optimized by using the execu-
tion frequency data previously generated and
saved in the feedback files written by a pre-
vious execution of the program compiled with
-xprofile=collect.
The source files and other compiler options
must be exactly the same as those used for
the compilation that created the compiled
program that generated the feedback file. If
compiled with -xprofile=collect:name, the
same program name name must appear in the
optimizing compilation: -xprofile=use:name.
tcov Basic block coverage analysis using "new"
style tcov.
The -xprofile=tcov option is the new style of
basic block profiling for tcov. It has simi-
lar functionality to the -xa option, but
correctly collects data for programs that
have source code in header files or make use
of C++ templates. See also -xa for informa-
tion on the old style of prfiling, the
tcov(1) man page, and the Performance Profil-
ing Tools manual for more details.
Code instrumentation is performed similarly
to that of the -xa option, but .d files are
no longer generated. Instead, a single file
is generated, the name of which is based on
the final executable. For example, if the
program is run out of
/foo/bar/myprog.profile, the data file is
stored in
/foo/bar/myprog.profile/myprog.tcovd.
The -xprofile=tcov and the -xa options are
compatible in a single executable, that is,
you can link a program that contains some
files that have been compiled with
-xprofile=tcov, and others with -xa. You can-
not compile a single file with both options.
When running tcov, you must pass it the -x
option to make it use the new style of data.
If not, tcov uses the old .d files, if any,
by default for data, and produces unexpected
output.
Unlike the -xa option, the TCOVDIR environ-
ment variable has no effect at compile-time.
However, its value is used at program run-
time. See tcov(1) and the Performance Pro-
filing Tools manual for more details.
The -xprofile=tcov option is incompatible
with -g.
-xregs=r Specify register usage (SPARC Only).
Specify usage of registers in generated code.
r is a comma-separated list of one or more of the
following: [no%]appl, [no%]float.
Example: -xregs=appl,no%float
The -xregs values are for specific -xarch values):
appl Allow using registers g2, g3, and g4.
(v8, v8a)
Allow using registers g2, g3, g4, and g5.
(v8plus, v8plusa)
Allow using registers g2, g3. (v9, v9a)
no%appl Do not use appl registers.
float Allow using floating-point registers as
specified in the SPARC ABI.
no%float Do not use floating-point registers.
The default is: -xregs=appl,float.
-xs Allows debugging by dbx without object ( .o)
files.
This option disables Auto-Read for dbx. Use this
option in case you cannot keep the .o files
around. This option passes -s to the assembler.
"No Auto-Read" is the older way of loading symbol
tables. It places all symbol tables for dbx in the
executable file. The linker links more slowly,
and dbx initializes more slowly.
Auto-Read is the newer and default way of loading
symbol tables. With Auto-Read, the information is
distributed in the .o files, so that dbx loads the
symbol table information only if and when it is
needed. Hence, the linker links faster, and dbx
initializes faster.
With -xs , if you move executables to another
directory, you do not have to move the object
files in order to use dbx.
Without -xs , if you move the executables, then
you must move both the source files and the object
( .o ) files in order to use dbx.
-xsafe=mem
(SPARC) Allows no memory-based traps occur.
This option grants permission to use the specula-
tive load instruction on V9 machines. It is only
effective when used with -x05 optimization, and
-xarch=v8plus, v8plusa, v9, or v9a is specified.
Warnings:
You should only use this option if you can safely
assert that no memory-based traps occur in your
program. For most programs, this assertion is
appropriate and can be safely made. For a program
that explicitly forces memory-based traps to han-
dle exceptional conditions, this assertion is not
safe.
-xsb Produces information for the WorkShop source code
browser.
This option causes the CC driver to generate extra
symbol table information in the SunWS_cache sub-
directory for the source browser.
See also:
-xsbfast
-xsbfast Produces only source browser information, no com-
pilation.
This option runs only the ccfe phase to generate
extra symbol table information in the SunWS_cache
subdirectory for the source browser. No object
file is
-xspace (SPARC) Does not allow optimizations that increase
code size.
-xtarget=t
Specifies the target system for instruction set
and optimization. t must be one of: native, gen-
eric, sytem-name
The -xtarget option permits a quick and easy
specification of the -xarch, -xchip, and -xcache
combinations that occur on real systems. The only
meaning of -xtarget is in its expansion. The
-xtarget values on SPARC platforms:
Value Meaning
native Gets the best performance on the host
system.
The compiler generates code for the best
performance on the host system. It
determines the available architecture,
chip, and cache properties of the
machine on which the compiler is run-
ning.
generic Gets the best performance for generic
architecture, chip and cache.
The compiler expands -xtarget=generic
to:
-xarch=generic -xchip=generic
-xcache=generic
This is the default value.
system-name
Gets the best performance for the speci-
fied system.
You select a system name from C++ User's
Guide Table 3-15 that lists the mnemonic
encodings of the actual system name and
numbers.
Note: The -compat and the -xtarget=v9 options are
not supported when used together.
Compiling for 64-bit Solaris 7 software on SPARC
or UltraSPARC V9 platforms is indicated by the
-xarch=v9|v9a flag. Setting -xtarget=ultra|ultra2
is not necessary or sufficient. If -xtarget is
specified, the -xarch=v9|v9a option must appear
after -xtarget, as in: -xtarget=ultra -xarch=v9
otherwise, the -xtarget setting will revert the
-xarch value to v8.
For x86 platforms, -xtarget accepts the following
values:
o native or generic
o 386 (Directs the compiler to generate code
for the best performance on the Intel 80386
microprocessor.)
o 486 (Directs the compiler to generate code
for the best performance on the Intel 80486
microprocessor.)
o pentium (Directs (Directs the compiler to
generate code for the best performance on
the Pentium or Pentium Pro microprocessor.)
This option is a macro. Each specific value for
-xtarget expands into a specific set of values for
the -xarch, -xchip, and -xcache options. Refer to
Table 3-15 in the C++ User's Guide for the
expanded values.
Valid system names on SPARC are: sun4/15, sun4/20,
sun4/25, sun4/30, sun4/40, sun4/50, sun4/60,
sun4/65, sun4/75, sun4/110, sun4/150, sun4/260,
sun4/280, sun4/330, sun4/370, sun4/390, sun4/470,
sun4/490, sun4/630, sun4/670, sun4/690, sselc,
ssipc, ssipx, sslc, sslt, sslx, sslx2, ssslc, ss1,
ss1plus, ss2, ss2p, ss4, ss5, ssvyger, ss10,
ss10/hs11, ss10/hs12, ss10/hs14, ss10/20,
ss10/hs21, ss10/hs22, ss10/30, ss10/40, ss10/41,
ss10/50, ss10/51, ss10/61, ss10/71, ss10/402,
ss10/412, ss10/512, ss10/514, ss10/612, ss10/712,
ss20/hs11, ss20/hs12, ss20/hs14, ss20/hs21,
ss20/hs22, ss20/51, ss20/61, ss20/71, ss20/502,
ss20/512, ss20/514, ss20/612, ss20/712, ss600/41,
ss600/51, ss600/61, ss600/120, ss600/140,
ss600/412, ss600/512, ss600/514, ss600/612,
ss1000, sc2000, cs6400, solb5, solb6, ultra,
ultra2, ultra2i, ultra1/140, ultra1/170,
ultra1/200, ultra2/1170, ultra2/1200, ultra2/1300,
ultra2/2170, ultra2/2200, ultra2/2300, entr2,
entr2/1170, entr2/2170, entr2/1200, entr2/2200,
entr150, entr3000, entr4000, entr5000, entr6000.
Compiling for 64-bit Solaris 7 on SPARC or
UltraSPARC V9 is indicated by the -xarch=v9 or
-xarch=v9a flag. Setting -xtarget=ultra or ultra2
is not necessary or sufficient. If -xtarget is
specified, the -xarch=v9 or v9a option must appear
AFTER the -xtarget, as in:
-xtarget=ultra2 ... -xarch=v9
otherwise the -xtarget setting will revert the
-xarch value to v8.
On x86, -xtarget accepts:
o generic or native
o 386 (Directs the compiler to generate code for
the best performance on the Intel 80386
microprocessor.)
o 486 (Directs the compiler to generate code for
the best performance on the Intel 80486
microprocessor.)
o pentium or pentium_pro (Directs the compiler to
generate code for the best performance on the
Pentium or Pentium Pro microprocessor.)
-xtime Causes the CC driver to report execution times for
the various compilation passes.
-xunroll=n
Enables unrolling of loops where possible.
This option specifies whether or not the compiler
optimizes (unrolls) loops.
When n is 1, it is a suggestion to the compiler
not to unroll loops.
When n is an integer greater than 1, -xunroll=n
causes the compiler to unroll loops n times.
-xwe Converts all warnings to errors by returning non-
zero exit status.
-ztext Forces a fatal error if any relocations remain
against non-writable, allocatable sections. This
option is passed to the linker.
NOTES
The C++ compiler includes the static library, libC.a. How-
ever, the corresponding bundled shared library, libC.so.5,
is out of sync with the C++ 5.0 compiler on Solaris OS ver-
sions 2.5.1, 2.6 and Solaris 7. For the compiler to work
correctly with the shared library on Solaris versions
2.5.1, 2.6 or Solaris 7, you must install the appropriate OS
patch; see the README.
Type CC -readme for details.
FILES
file.a Static library
file.C Input file
file.cc Input file
file.cpp Input file
file.cxx Input file
file.o Object file
file.so Dynamic (shared)
library
a.out Linked output
SEE ALSO
analyzer(1), as(1), c++filt(1), cc(1), csh(1), dbx(1),
debugger(1), gprof(1), ild(1), ld(1), more(1), nm(1),
prof(1), tcov(1)
C++ User's Guide,
C++ Programming Guide,
C++ Migration Guide,
C++ Library Reference
The C++ Programming Language, Third Edition, Bjarne
Stroustrup, Addison-Wesley 1997
The C Programming Language, B. W. Kernighan and D. M.
Ritchie, Prentice-Hall 1988
Solaris Linker and Libraries Guide
International Standard (ISO/IEC FDIS 14882), Programming
Languages - C++
|
Закладки на сайте Проследить за страницей |
Created 1996-2025 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |