C++ User's Guide | ![]() ![]() ![]() ![]() ![]() |
C++ Compiler Options
This chapter details the command-line options for the
CC
compiler running under Solaris 2.6, Solaris 7, and Solaris 8. The features described apply to all platforms except as noted; features unique to one platform are identified as SPARC or IA. See Multiplatform Release" in the preface for more information.The following table shows examples of typical option syntax formats.
TABLE 3-1 Option Syntax Format Examples option
-E
-option
value-I
pathname-option=
value-xunroll=4
-option
value-o
filename
The typographical conventions in TABLE P-1 are used in this section of the manual to describe individual options.
Parentheses, braces, brackets, pipe characters, and ellipses are metacharacters used in the descriptions of the options and are not part of the options themselves.
Some general guidelines for options are:
- The
-l
lib option links with librarylib
lib.a
(orlib
lib.so)
. It is always safer to put-l
lib after the source and object files to ensure the order in which libraries are searched.- In general, processing of the compiler options is from left to right (with the exception that
-U
options are processed after all-D
options), allowing selective overriding of macro options (options that include other options). This rule does not apply to linker options.- The
-I
,-L
,-pti
, and-R
options accumulate, they do not override.Source files, object files, and libraries are compiled and linked in the order in which they appear on the command line.
3.1 Options Summarized by Function
In this section, the compiler options are grouped by function to provide a quick reference.
3.1.1 Code Generation Options
The following code generation options are listed in alphabetical order.
3.1.2 Debugging Options
The following debugging options are listed in alphabetical order.
3.1.3 Floating-Point Options
The following floating-point options are listed in alphabetical order.
3.1.4 Language Options
The following language options are listed in alphabetical order.
TABLE 3-5 Language Options Sets the major release compatibility mode of the compiler. -compat
Enables or disables various C++ language features. -features=
alst
3.1.5 Library Options
The following library linking options are listed in alphabetical order.
3.1.6 Licensing Options
The following licensing options are listed in alphabetical order.
TABLE 3-7 Licensing Options Disables license queueing. -noqueue
SPARC: Links in the Sun Performance Library. -xlic_lib=sunperf
Shows license server information. -xlicinfo
3.1.7 Obsolete Options
The following options are obsolete or will become obsolete.
3.1.8 Output Options
The following output options are listed in alphabetical order.
3.1.9 Performance Options
The following performance options are listed in alphabetical order.
3.1.10 Preprocessor Options
The following preprocessor options are listed in alphabetical order.
3.1.11 Profiling Options
The following profiling options are listed in alphabetical order.
3.1.12 Reference Options
The following options provide a quick reference to compiler information.
3.1.13 Source Options
The following source options are listed in alphabetical order.
TABLE 3-14 Source Options Adds pathname to the include
file search path.-I
pathnameOutputs makefile dependency information. -xM
Generates dependency information, but excludes /usr/include
.-xM1
3.1.14 Template Options
The following template options are listed in alphabetical order.
3.1.15 Thread Options
The following thread options are listed in alphabetical order.
TABLE 3-16 Thread Options Compiles and links for multithreaded code. -mt
SPARC: Allows no memory-based traps. -xsafe=mem
3.1.16 How Option Information Is Organized
To help you find information, compiler option descriptions are separated into the following subsections. If the option is one that is replaced by or identical to some other option, see the description of the other option for full details.
3.2 Option Reference
3.2.1
-386
IA: Same as
-xtarget=386
. This option is provided for backward compatibility only.3.2.2
-486
IA: Same as
-xtarget=486
. This option is provided for backward compatibility only.3.2.3
-a
3.2.4
-B
bindingSpecifies whether a library binding for linking is symbolic, dynamic (shared), or static (nonshared).
You can use the
-B
option to toggle several times on a command line. This option is passed to the linker,ld
.
Note On the Solaris 7 and Solaris 8 platforms, not all libraries are available as static libraries.
Values
binding must be one of the following:
(No space is allowed between
-B
and the binding value.)Defaults
If -
B
is not specified,-Bdynamic
is assumed.Interactions
To link the C++ default libraries statically, use the
-staticlib
option.The
-Bstatic
and-Bdynamic
options affect the linking of the libraries that are provided by default. To ensure that the default libraries are linked dynamically, the last use of-B
should be-Bdynamic.
Examples
The following compiler command links
lib
foo.a
even iflib
foo.so
exists; all other libraries are linked dynamically:
example%CC a.o -Bstatic -lfoo -Bdynamic
Warnings
If you compile and link in separate steps and are using the
-B
binding option, you must include the option in the link step.When building a shared library in compatibility mode (
-compat[=4]
), do not use -B
symbolic if the library has exceptions in it. Exceptions that should be caught might be missed.See also
-nolib
,-staticlib
,ld
(1), Section 5.5 "Statically Linking Standard Libraries"," Linker and Libraries Guide3.2.5
-c
Compile only; produce object
.o
files, but suppress linking.This option directs the
CC
driver to suppress linking withld
and produce 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.Examples
If you enter
CC -c x.cc
, thex.o
object file is generated.If you enter
CC -c x.cc -o y.o
, they.o
object file is generated.Warnings
When the compiler produces object code for an input file (
.c
,.i
), the compiler always produces a.o
file in the working directory. If you suppress the linking step, the.o
files are not removed.See also
3.2.6
-cg[89|92]
3.2.7
-compat[=(4|5)]
Sets the major release compatibility mode of the compiler. This option controls the
__SUNPRO_CC_COMPAT
and__cplusplus
macros.The C++ compiler has two principal modes. The compatibility mode accepts ARM semantics and language defined by the 4.2 compiler. The standard mode accepts constructs according to the ANSI/ISO standard. These two modes are incompatible with each other because the ANSI/ISO standard forces significant, incompatible changes in name mangling, vtable layout, and other ABI details. These two modes are differentiated by the
-compat
option as shown in the following values.Values
The
-compat
option can have the following values.
Defaults
If the
-compat
option is not specified,-compat
=5 is assumed.If only
-compat
is specified,-compat=4
is assumed.Regardless of the
-compat
setting,__SUNPRO_CC
is set to0x510
.Interactions
Use of
-compat[=4]
with-xarch=v9
,-xarch=v9a
, or-xarch=v9b
is not supported.See also
3.2.8
+
d
Does not expand C++ inline functions.
Interactions
This option is automatically turned on when you specify
-g
, the debugging option.The
-g0
debugging option does not turn on+d
.See also
3.2.9
-D
name[=
def]Defines the macro symbol name to the preprocessor.
Using this option is equivalent to including a
#define
directive at the beginning of the source. You can use multiple-D
options.Values
The following tables show the predefined macros. You can use these values in such preprocessor conditionals as
#ifdef
.
TABLE 3-18 SPARC and IA Predefined Symbols __ARRAYNEW
__ARRAYNEW
is defined if the "array" forms of operatorsnew
anddelete
are enabled. See-features=[no%]arraynew
for more information._BOOL
_BOOL is defined if type bool
is enabled. See-features=[no%]bool
for more information.__BUILTIN_VA_ARG_INCR
For the __ builtin_alloca
, __builtin_va_alist,
and__
builtin_va_arg_incr
keywords invarargs.h, stdarg.h
, andsys/varargs.h.
__cplusplus
__DATE__
__FILE__
__ LINE__
__STDC__
__ sun
sun
See Interactions. __SUNPRO_CC=0x510
The value of __SUNPRO_CC
indicates the release number of the compiler__SUNPRO_CC_COMPAT=(4|5)
See Section 3.2.7 -compat[=(4|5)] __SVR4
__TIME__
__'
uname -s'_'uname -r'Where uname -s is the output of
uname -s
and uname -r is the output ofuname -r
with the invalid characters, such as periods (.), replaced by underscores, as in-D
__SunOS_5_7
and-D
__SunOS_5_8.
__unix
unix
See Interactions.
TABLE 3-19 UNIX Predefined Symbols _WCHAR_T
TABLE 3-20 SPARC Predefined Symbols __sparc
32-bit compilation modes only sparc
See Interactions.
TABLE 3-21 SPARC v9
Predefined Symbols__sparcv9
64-bit compilation modes only
TABLE 3-22 IA Predefined Symbols __i386
i386
See Interactions.
Defaults
If you do not use =def, name is defined as 1.
Interactions
If
+p
is used,sun
,unix
,sparc
, andi386
are not defined.See also
3.2.10
-d(y|n)
Allows or disallows dynamic libraries for the entire executable.
This option can appear only once on the command line.
Values
-dy
Specifies dynamic linking in the link editor. -dn
Specifies static linking in the link editor.
Defaults
If no
-d
option is specified,-dy
is assumed.See also
ld
(1), Linker and Libraries Guide3.2.11
-dalign
SPARC: Generates
double-word load
andstore
instructions whenever possible for improved performance.This option assumes that all
double
type data aredouble-word
aligned.Warnings
If you compile one program unit with
-dalign
, compile all units of a program with-dalign
, or you might get unexpected results.3.2.12
-dryrun
Shows commands built by driver, but does not compile.
This option directs the driver
CC
to show, but not execute, the subcommands constructed by the compilation driver.3.2.13
-E
Runs the preprocessor on source files; does not compile.
Directs the
CC
driver to run only the preprocessor on C++ source files, and to send the result tostdout
(standard output). No compilation is done; no.o
files are generated.This option causes preprocessor-type line number information to be included in the output.
Examples
This option is useful for determining the changes made by the preprocessor. For example, the following program,
.foo.cc
, generates the output shown in CODE EXAMPLE 3-2
CODE EXAMPLE 3-1 foo.cc
#if __cplusplus < 199711Lint power(int, int);#elsetemplate <> int power(int, int);#endifint main () {int x;x=power(2, 10);}
CODE EXAMPLE 3-2 Output of foo.cc
Using-E
Option example%CC -E foo.cc
#4 "foo.cc"template < > int power ( int , int ) ;int main ( ) {int x ;x = power ( 2 , 10 ) ;}Warnings
Output from this option is not supported as input to the C++ compiler when templates are used.
See also
3.2.14
+e(0|1)
Controls virtual table generation in compatibility mode (
-compat[=4])
. Invalid and ignored when in standard mode (the default mode).Values
The
+e
option can have the following values.
0
Suppresses the generation of virtual tables and creates external references to those that are needed. 1
Creates virtual tables for all defined classes with virtual functions.
Interactions
When you compile with this option, also use the
-features=no%except
option. Otherwise, the compiler generates virtual tables for internal types used in exception handling.See also
3.2.15
-fast
Optimizes for speed of execution using a selection of options.
This option is a macro that selects a combination of compilation options for optimum execution speed on the machine upon which the code is compiled.
Expansions
This option provides near maximum performance for many applications by expanding to the following compilation options.
TABLE 3-23 -fast
Expansion-dalign
X - -fns
X - -fsimple=2
X - -ftrap=%none
X X -nofstore
- X -xlibmil
X X -xlibmopt
X X -xO5
X X -xtarget=native
X X
Interactions
The
-fast
macro expands into compilation options that may affect other specified options. For example, in the following command, the expansion of the-fast
macro includes-xtarget=native
which reverts-xarch
to one of the 32-bit architecture options.Incorrect:
example%CC -xarch=v9 -fast test.cc
Correct:
example%CC -fast -xarch=v9 test.cc
See the description for each option to determine possible interactions.
The code generation option, optimization level, and use of inline template files can be overridden by subsequent options (see examples). The optimization level that you specify overrides a previously set optimization level.
The
-fast
option includes-fns
-ftrap=%none
; that is, this option turns off all trapping.Examples
The following compiler command results in an optimization level of
-xO3
.
example%CC -fast -xO3
The following compiler command results in an optimization level of
-xO5.
example%CC -xO3 -fast
Warnings
Code that is compiled with the
-fast
option is not portable. For example, using the following command on an UltraSPARC-III system generates a binary that will not execute on an UltraSPARC-II system.
example%CC -fast test.cc
Do not use this option for programs that depend on IEEE standard floating-point arithmetic; different numerical results, premature program termination, or unexpected SIGFPE signals can occur.
In previous SPARC releases, the
-fast
macro expanded to-fsimple=1
. Now it expands to-fsimple=2
.In previous releases, the
-fast
macro expanded to-xO4
. Now it expands to-xO5
.
Note In previous SPARC releases, the-fast
macro option included-fnonstd;
now it does not. Nonstandard floating-point mode is not initialized by-fast
. See the Numerical Computation Guide,ieee_sun
(3M).
See also
-dalign
,-fns
,-fsimple
,-ftrap=%none
,-libmil
,-nofstore
,-xO5
,-xlibmopt
,-xtarget=native
3.2.16
-features
=a[,...a]Enables/disables various C++ language features named in a comma-separated list.
Values
In both compatibility mode (
-compat[=4]
) and standard mode (the default mode), a can have the following values.
In standard mode (the default mode), a can have the following additional values.
In compatibility mode (
-compat[=4]
), a can have the following additional values.
Note The[no%]castop
setting is allowed for compatibility with makefiles written for the C++ 4.2 compiler, but has no affect on the 5.0 and Sun WorkShop 6 C++ compilers. The new style casts (const_cast
,dynamic_cast
,reinterpret_cast
, andstatic_cast
) are always recognized and cannot be disabled.
Defaults
If
-features
is not specified, the following is assumed:
- Compatibility mode (
-compat[=4]
)
-features=%none,anachronisms,except
- Standard mode (the default mode)
-features=%all,no%iddollar
See also
3.2.17
-flags
3.2.18
-fnonstd
IA: Causes nonstandard initialization of floating-point hardware.
In addition, the
-fnonstd
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 terminates with a memory dump (unless you limit the core dump size to 0).Defaults
If
-fnonstd
is not specified, IEEE 754 floating-point arithmetic exceptions do not abort the program, and underflows are gradual.See also
-fns
,-ftrap=common
, Numerical Computation Guide.3.2.19
-fns[=(yes|no)]
SPARC: Enables/disables the SPARC nonstandard floating-point mode.
-fns=yes
(or-fns
) causes the nonstandard floating point mode to be enabled when a program begins execution.This option provides a way of toggling the use of nonstandard or standard floating-point mode following some other macro option that includes
-fns
, such as-fast
. (See "Examples.")On some SPARC devices, 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 devices that do not support gradual underflow and subnormal numbers in hardware,
-fns=yes
(or-fns
) can significantly improve the performance of some programs.Values
The
-fns
option can have the following values.
yes
Selects nonstandard floating-point mode no
Selects standard floating-point mode
Defaults
If
-fns
is not specified, the nonstandard floating point mode is not enabled automatically. Standard IEEE 754 floating-point computation takes place--that is, underflows are gradual.If only
-fns
is specified,-fns=yes
is assumed.Examples
In the following example,
-fast
expands to several options, one of which is-fns=yes
which selects nonstandard floating-point mode. The subsequent-fns=no
option overrides the initial setting and selects floating-point mode.
example%CC foo.cc -fast -fns=no
Warnings
When nonstandard mode is enabled, floating-point arithmetic can produce results that do not conform to the requirements of the IEEE 754 standard.
If you compile one routine with the
-fns
option, then compile all routines of the program with the-fns
option; otherwise, you might get unexpected results.This option is effective only on SPARC devices, and only if used when compiling the main program. On IA devices, the option is ignored.
Use of the
-fns=yes
(or-fns
) option might generate the following message if your program experiences a floating-point error normally managed by the IEEE floating-point trap handlers:See also
Numerical Computation Guide,
ieee_sun
(3M)3.2.20
-fprecision
=pIA: Sets the non-default floating-point precision mode.
The
-fprecision
option 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, subtract, multiply, divide, and square root) are rounded.Values
p must be one of the following values.
single
Rounds to an IEEE single-precision value. double
Rounds to an IEEE double-precision value. extended
Rounds to the maximum precision available.
If p is
single
ordouble
, this option causes the rounding precision mode to be set tosingle
ordouble
precision, respectively, when a program begins execution. If p isextended
or the-fprecision
option is not used, the rounding precision mode remains at theextended
precision.The
single
precision rounding mode causes results to be rounded to 24 significant bits, anddouble
precision rounding mode causes results to be rounded to 53 significant bits. In the defaultextended
precision mode, results are rounded to 64 significant bits. This mode controls only the precision 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, however.The nominal precision of the
float
type issingle
. The nominal precision of thelong double
type isextended
.Defaults
When the
-fprecision
option is not specified, the rounding precision mode defaults toextended
.Warnings
This option is effective only on IA devices and only if used when compiling the main program. On SPARC devices, this option is ignored.
3.2.21
-fround=
rSets the IEEE rounding mode in effect at startup.
This option sets the IEEE 754 rounding mode that:
- Can be used by the compiler in evaluating constant expressions
- Is established at runtime during the program initialization
The meanings are the same as those for the
ieee_flags
subroutine, which can be used to change the mode at runtime.Values
r must be one of the following values.
nearest
Rounds towards the nearest number and breaks ties to even numbers. tozero
Rounds to zero. negative
Rounds to negative infinity. positive
Rounds to positive infinity.
Defaults
When the
-fround
option is not specified, the rounding mode defaults to-fround=nearest.
Warnings
If you compile one routine with
-fround=
r, compile all routines of the program with the same-fround=
r option; otherwise, you might get unexpected results.This option is effective only if used when compiling the main program.
3.2.22
-fsimple
[=
n]Selects floating-point optimization preferences.
This option allows the optimizer to make simplifying assumptions concerning floating-point arithmetic.
Values
If n is present, it must be 0, 1, or 2.
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
Warnings
This option can break IEEE 754 conformance.
See also
3.2.23
-fstore
IA: 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 rather than leave the value in a register when the following is true:
- The expression or function is assigned to a variable.
- The expression is cast to a shorter floating-point type.
To turn off this option, use the
-nofstore
option.Warnings
Due to roundoffs and truncation, the results can be different from those that are generated from the register values.
See also
3.2.24 -
ftrap=
t[,...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 useieee_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.Values
t can be one of the following values.
Note that the
[no%]
form of the option is used only to modify the meaning of the%all
andcommon
values, 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 want to enable the IEEE traps,
-ftrap=common
is the recommended setting.Defaults
If
-ftrap
is not specified, the-ftrap=%none
value is assumed.(Traps are not enabled automatically.)
Examples
When one or more terms are given, the list is processed sequentially from left to right, thus
-ftrap=%all,no%inexact
means to set all traps except inexact.Interactions
The mode can be changed at runtime with
ieee_handler
(3M).Warnings
If you compile one routine with
-ftrap=
t, compile all routines of the program with the same-ftrap=
t option; otherwise, you might get unexpected results.Use the
-ftrap=inexact
trap with caution. Use of-ftrap=inexact
results in the trap being issued whenever a floating-point value cannot be represented exactly. For example, the following statement generates this condition:
x = 1.0 / 3.0;
This option is effective only if used when compiling the main program. Be cautious when using this option. If you wish to enable the IEEE traps, use
-ftrap=common
.See also
3.2.25
-G
Build a dynamic shared library instead of an executable file.
All source files specified in the command line are compiled with
-Kpic
by default.When building a shared library that uses templates, it is necessary in most cases to include in the shared library those template functions that are instantiated in the template data base. Using this option automatically adds those templates to the shared library as needed.
Interactions
The following options are passed to
ld
if-c
(the compile-only option) is not specified:
-dy
-G
-R
Warnings
Do not use
ld
-G
to build shared libraries; useCC
-G
. TheCC
driver automatically passes several options told
that are needed for C++.See also
-dy, -Kpic, -xcode=pic13, -xildoff, -ztext, ld(1
) man page, C++ Library Reference.3.2.26
-g
Instructs both the compiler and the linker to prepare the file or program for debugging.
- Producing detailed information, known as stabs, in the symbol table of the object files and the executable
- Producing some "helper functions," which the debugger can call to implement some of its features
- Disabling the inline generation of functions
- Disabling certain levels of optimization
Interactions
If you use this option with
-xO
level, you will get limited debugging information. For more information, see Section 3.2.117 -xOlevel.If you use this option and the optimization level is
-xO3
or lower, the compiler provides best-effort symbolic information with almost full optimization. Tail-call optimization and back-end inlining are disabled.If you use this option and the optimization level is
-xO4
or higher, the compiler provides best-effort symbolic information with full optimization.When you specify this option, the
+d
option is specified automatically.This option makes
-xildon
the default incremental linker option in order to speed up the compile-edit-debug cycle.This option invokes
ild
in place ofld
unless any of the following are true:
- The
-G
option is present- The
-xildoff
option is present- Any source files are named on the command line
See also
+d, -g0, -xildoff, -xildon, -xs, ld
(1) man page, Debugging a Program Withdbx
(for details about stabs)3.2.27
-g0
Compiles and links for debugging, but does not disable inlining.
This option is the same as
-g
, except that+d
is disabled.See also
+d, -g, -xildon,
Debugging a Program Withdbx
3.2.28
-H
Prints path names of included files.
On the standard error output
(stderr)
, this option prints, one per line, the path name of each#include
file contained in the current compilation.3.2.29
-help
3.2.30
-h
nameAssigns the name name to the generated dynamic shared library. This is a loader option, passed to
ld
. In general, 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
-h
name option, then no intrinsic name is recorded in the library file.Every executable file has a list of shared library files that are needed. When the runtime linker links the library into an executable 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.
Examples
example%CC -G -o libx.so.1 -h libx.so.1 a.o b.o c.o
3.2.31
-i
Tells the linker,
ld,
to ignore anyLD_LIBRARY_PATH
setting.3.2.32
-I
pathnameAdd pathname to the
#include
file search path.This option 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 the following order:
- For include statements of the form
#include "foo.h"
(where quotation marks are used), the directory containing the source file is searched- For include statements of the form
#include <foo.h>
(where angle brackets are used), the directory containing the source file is not searched- The directories named with
-I
options, if any- The directories for compiler-provided C++ header files, ANSI C header files, and special-purpose files
- The
/usr/include
directory
Note The standard headers are treated differently. For more information, see Section 5.7.4 Standard Header Implementation.
Interactions
If
-pti
path is not used, the compiler looks for template files in-I
pathname.Use
-I
pathname instead of-pti
path.3.2.33
-instances
=aControls the placement and linkage of template instances.
Values
a must be one of the following values.
Defaults
If
-instances
is not specified,-instances=extern
is assumed.
See also
3.2.34
-keeptmp
Retains temporary files created during compilation.
Along with
-verbose=diags
, this option is useful for debugging.See also
3.2.35
-KPIC
3.2.36
-Kpic
IA: Compiles with 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 generated in pc-relative addressing mode through a procedure linkage table.
3.2.37
-L
dirAdds dir to list of directories to search for libraries.
This option is passed to
ld
. The directory dir is searched before compiler-provided directories.3.2.38
-l
libAdds library
lib
lib.a
orlib
lib.so
to the linker's list of search libraries.This option is passed to
ld.
Normal libraries have names such aslib
lib.a
orlib
lib.so
, where thelib
and.a
or.so
parts are required. You should 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-L
dir.Use this option after your object file name.
Interactions
It is always safer to put
-l
x after the list of sources and objects to insure that libraries are searched in the correct order.Warnings
To ensure proper library linking order, you must use
-mt
, rather than-lthread
, to link withlibthread
.If you are using POSIX threads, you must link with the
-mt
and-lpthread
options. The-mt
option is necessary becauselibCrun
(standard mode) andlibC
(compatibility mode) needlibthread
for a multithreaded application.See also
-L
dir,-mt,
C++ Library Reference, and Tools.h++ Class Library Reference3.2.39
-libmieee
3.2.40
-libmil
3.2.41
-library=
l[,...l]Incorporates specified CC-provided libraries into compilation and linking.
Values
For compatibility mode (
-compat[=4]
), l must be one of the following values.
For standard mode (the default mode), l must be one of the following:
Defaults
- Compatibility mode (
-compat[=4]
)
- If
-library
is not specified,-library=%none,libC
is assumed.- The
libC
library always is included unless it is specifically excluded using-library=%none
or-library=no%libC
.- Standard mode (the default mode)
Examples
To link in standard mode without any C++ libraries (except
libCrun
), use:
example%CC -library=%none
To include the Rogue Wave
tools.h++
version 7 library and theiostream
library in standard mode:
example%CC -library=rwtools7,iostream
Interactions
If a library is specified with
-library
, the proper-I
paths are set during compilation. The proper-L,-Y P,
-R
paths and-l
options are set during linking.Use of the
-library
option ensures that the-l
options for the specified libraries are emitted in the right order. For example, the-l
options are passed told
in the order-lrwtool -liostream
for both-library=rwtools7,iostream
and-library=iostream,rwtools7
.The specified libraries are linked before the system support libraries are linked.
Only one Rogue Wave tools library can be used at a time.
The Rogue Wave
Tools.h
++ version 7 library is built with classic iostreams. Therefore, when you include the Rogue Wave tools library in standard mode, you must also includelibiostream
. For more information, see the C++ Migration Guide.If you include both
libCstd
andlibiostream
, you must be careful to not use the old and new forms of iostreams (for example,cout
andstd::cout
) within a program to access the same file. Mixing standard iostreams and classic iostreams in the same program is likely to cause problems if the same file is accessed from both classic and standard iostream code.Programs linking neither
libC
norlibCrun
might not use all features of the C++ language.If
-xnolib
is specified,-library
is ignored.Warnings
The set of libraries is not stable and might change from release to release.
See also
-I
,-l
,-R
,-staticlib
,-xnolib
, Section 2.5.3.3 "Using make With Standard Library Header Files"," C++ Library Reference, Tools.h++ User's Guide, Tools.h++ Class Library Reference, Standard C++ Class Library Reference.For information on using the
-library=no%cstd
option to enable use of your own C++ standard library, see Section 5.7 Replacing the C++ Standard Library.3.2.42
-migration
Explains where to get information about migrating source code that was built for earlier versions of the compiler.
3.2.43
-misalign
SPARC: Permits misaligned data, which would otherwise generate an error, in memory. This is shown in the following code:
char b[100];int f(int * ar) {return *(int *) (b +2) + *ar;}This option informs the compiler that some data in your program is not properly aligned. Thus, very conservative loads and stores must be used for any data that might be misaligned, that is, one byte at a time. Using this option may cause significant degradation in runtime performance. The amount of degradation is application dependent.
Interactions
When using
#pragma
pack
on a SPARC platform to pack denser than the type's default alignment, the-misalign
option must be specified for both the compilation and the linking of the application.Misaligned data is handled by a trap mechanism that is provided by
ld
at runtime. If an optimization flag (-x0[1|2|3|4|5]
or an equivalent flag) is used with the-misalign
option, the additional instructions required for alignment of misaligned data are inserted into the resulting object file and will not generate runtime misalignment traps.Warnings
If possible, do not link aligned and misaligned parts of the program.
If compilation and linking are performed in separate steps, the
-misalign
option must appear in both the compile and link commands.3.2.44
-mt
Compiles and links for multithreaded code.
- Passes
-D_REENTRANT
to the preprocessor- Passes
-lthread
in the correct order to ld- Ensures that, for standard mode (the default mode),
libthread
is linked beforelibCrun
- Ensures that, for compatibility mode (
-compat
),libthread
is linked beforelibC
The
-mt
option is required if the application or libraries are multithreaded.Warnings
To ensure proper library linking order, you must use this option, rather than
-lthread
, to link withlibthread
.If you are using POSIX threads, you must link with the
-mt
and-lpthread
options. The-mt
option is necessary becauselibCrun
(standard mode) andlibC
(compatibility mode) needlibthread
for a multithreaded application.If you compile and link in separate steps and you compile with
-mt
, be sure to link with-mt
, as shown in the following example, or you might get unexpected results.
example%CC -c -mt myprog.cc
example%CC -mt myprog.o
See also
-xnolib
, C++ Programming Guide, Multithreaded Programming Guide, Linker and Libraries Guide, C++ Library Reference3.2.45
-native
3.2.46
-noex
3.2.47
-nofstore
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 either of the following are true:
- The expression or function is assigned to a variable
or- The expression or function is cast to a shorter floating-point type
See also
3.2.48
-nolib
3.2.49
-nolibmil
3.2.50
-noqueue
If no license is available, this option returns without queuing your request and without compiling. A nonzero status is returned for testing makefiles.
3.2.51
-norunpath
Does not build a runtime search 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 told
. 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. Your customers do not have to work with that nonstandard location.
Interactions
If you use any shared libraries under the compiler installed area (the default location is
/opt/SUNWspro/lib
) and you also use-norunpath
, then you should either use the-R
option at link time or set the environment variableLD_LIBRARY_PATH
at runtime to specify the location of the shared libraries. Doing so allows the runtime linker to find the shared libraries.3.2.52
-O
3.2.53
-O
level3.2.54
-o
filenameSets the name of the output file or the executable file to filename.
Interactions
When the compiler must store template instances, it stores them in the template repository in the output file's directory. For example, the following command writes the object file to
./sub/a.o
and writes template instances into the repository contained within./sub/SunWS_cache
.
example%CC -o sub/a.o a.cc
The compiler reads from the template repositories corresponding to the object files that it reads. For example, the following command reads from
./sub1/SunWS_Cache
and./sub2/SunWS_cache
, and, if necessary, writes to./SunWS_cache
.
example%CC sub1/a.o sub2/b.o
For more information, see Section 4.4 "The Template Repository"."
Warnings
The filename must have the appropriate suffix for the type of file to be produced by the compilation. It cannot be the same file as the source file, since the
CC
driver does not overwrite the source file.3.2.55
+p
Ignore non-standard preprocessor asserts.
Defaults
If
+p
is not present, the compiler recognizes non-standard preprocessor asserts.Interactions
If
+p
is used, the following macros are not defined:
sun
unix
sparc
i386
3.2.56
-P
Only preprocesses source; does not compile. (Outputs a file with a
.i
suffix)This option does not include preprocessor-type line number information in the output.
See also
3.2.57
-p
Prepares object code to collect data for profiling with
prof
.This option invokes a runtime recording mechanism that produces a
mon.out
file at normal termination.See also
-xpg
,-xprofile
,analyzer
(1) man page, Analyzing Program Performance With Sun WorkShop.3.2.58
-pentium
IA: Replace with
-xtarget=pentium
.3.2.59
-pg
3.2.60
-PIC
3.2.61
-pic
3.2.62
-pta
3.2.63
-pti
pathSpecifies an additional search directory for template source.
This option is an alternative to the normal search path set by
-I
pathname. If the-pti
path option is used, the compiler looks for template definition files on this path and ignores the-I
pathname option.Using the
-I
pathname option instead of-pti
path produces less confusion.See also
3.2.64
-pto
3.2.65
-ptr
This option is obsolete and is ignored by the compiler.
Warnings
Even though the
-ptr
option is ignored, you should remove-ptr
from all compilation commands because, in a later release, it may be reused with a different behavior.See also
For information about repository directories, see Section 4.4 "The Template Repository"."
3.2.66
-ptv
3.2.67
-Qoption
phase option[,...option]
Passes option to the compilation phase.
To pass multiple options, specify them in order as a comma-separated list.
Values
phase must have one of the following values.
ccfe
ccfe
iropt
cg386
cg
codegen
CClink
CClink
ld
ld
Examples
In the following command line, when
ld
is invoked by theCC
driver,-Qoption
passes the-i
and-m
options told
:
example%CC -Qoption ld -i,-m test.c
Warnings
Be careful to avoid unintended effects. For example,
-Qoption ccfe -features=bool,castopis interpreted as
-Qoption ccfe -features=bool -Qoption ccfe castopThe correct usage is
-Qoption ccfe -features=bool,-features=castop3.2.68
-qoption
phase option3.2.69
-qp
3.2.70
-
Qproduce
sourcetypeCauses the
CC
driver to produce output of the type sourcetype.Sourcetype suffixes are defined below.
.i
Preprocessed C++ source from ccfe
.o
Object file from cg
, the code generator.s
Assembler source from cg
3.2.71
-qproduce
sourcetype3.2.72
-R
pathname[:...pathname]
Builds dynamic library search paths into the executable file.
You can have more than one pathname, such as
-R/path1:/path2
.Defaults
If the
-R
option is not present, the library search path that is recorded in the output object and passed to the runtime linker depends upon the target architecture instruction specified by the-xarch
option (when-xarch
is not present,-xarch=generic
is assumed).
v9
,v9a
, orv9b
install_directory /SUNWspro/lib/v9
All other values install_directory /SUNWspro/lib
In a default installation, install-directory is
/opt
.Interactions
If the
LD_RUN_PATH
environment variable is defined and the-R
option is specified, then the path from-R
is scanned and the path fromLD_RUN_PATH
is ignored.See also
-norunpath,
Linker and Libraries Guide3.2.73
-readme
3.2.74
-S
Compiles and generates only assembly code.
This option causes the
CC
driver to compile the program and output an assembly source file, without assembling the program. The assembly source file is named with a.s
suffix.3.2.75
-s
Strips the symbol table from the executable file.
This option removes all symbol information from output executable files. This option is passed to
ld
.3.2.76
-sb
3.2.77
-sbfast
3.2.78
-
staticlib
=l[,...l]Indicates which C++ libraries specified in the
-library
option (including its defaults) are to be linked statically.Values
l must be one of the following values.
Defaults
If
-staticlib
is not specified,-staticlib=%none
is assumed.Examples
The following command line links
libCrun
statically becauseCrun
is a default value for-library
:
example%CC -staticlib=Crun
(correct)However, the following command line does not link
libgc
becauselibgc
is not linked unless explicitly specified with the-library
option:
example%CC
-staticlib=gc
(incorrect)To link
libgc
statically, use the following command:
example%CC -library=gc -staticlib=gc
(correct)With the following command, the
librwtool
library is linked dynamically. Becauselibrwtool
is not a default library and is not selected using the-library
option,-staticlib
has no effect:
example%CC -lrwtool -library=iostream \
-staticlib=rwtools7
(incorrect)This command links the
librwtool
library statically:
example%CC -library=rwtools7,iostream -staticlib=rwtools7
(correct)Interactions
The
-staticlib
option only works for C++ libraries that are selected explicitly with the-library
option or that are selected implicitly by default. In compatibility mode (-compat=[4]
),libC
is selected by default. In standard mode (the default mode),Cstd
andCrun
are selected by default.When using
-xarch=v9
,-xarch=v9a
, or-xarch=v9b
, some C++ libraries are not available as static libraries.Warnings
The set of allowable values for library is not stable and might change from release to release.
See also
-library
, Section 5.5 "Statically Linking Standard Libraries""3.2.79
-temp=
dirDefines directory for temporary files.
This option sets the name of the directory for temporary files, generated during the compilation process, to dir.
See also
3.2.80
-template
=w[,...w]Enables/disables various template options.
Values
w must be one of the following values.
Defaults
If the
-template
option is not specified,-template=no%wholeclass,extdef
is assumed.3.2.81
-time
3.2.82
-U
nameDeletes initial definition of the preprocessor symbol name.
This option removes any initial definition of the macro symbol name created by
-D
on the command line including those implicitly placed there by theCC
driver. It has no effect on any other predefined macros, nor any macro definitions in source files.You can specify multiple
-U
options on the command line.Interactions
All
-U
options are processed after any-D
options that are present.3.2.83
-unroll=
n3.2.84
-V
3.2.85
-v
3.2.86
-vdelx
Compatibility mode only (
-compat[=4]
):For expressions using
delete[]
, this option generates 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 a third argument: the address of the destructor 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 usingdelete[]
.Warnings
This is an obsolete option that will be removed in future releases. Don't use this option unless you have bought some software from a third-party vendor and the vendor recommends using this option.
3.2.87
-verbose
=v[,...v]Values
v must be one of the following values.
You can specify more than one option, for example,
-verbose=template
,diags
.Defaults
If
-verbose
is not specified,-verbose=%none
is assumed.3.2.88
+w
Identifies code that might have unintended consequences.
This option generates additional warnings about questionable constructs that are:
- Nonportable
- Likely to be mistakes
- Inefficient
Defaults
If
+w
is not specified, the compiler warns about constructs that are almost certainly problems.See also
3.2.89
+w2
Emits all the warnings emitted by
+w
plus warnings about technical violations that are probably harmless, but that might reduce the maximum portability of your program.Warnings
Some Solaris and C++ standard header files result in warnings when compiled with
+w2
.See also
3.2.90
-w
Suppresses most warning messages.
This option causes the compiler not to print warning messages. However, some warnings, particularly warnings regarding serious anachronisms, cannot be suppressed.
See also
3.2.91
-xa
If set at compile time, the
TCOVDIR
environment variable specifies the directory where the coverage (.d)
files are located. If this variable is not set, then the coverage (.d)
files remain in the same directory as thesource
files.Use this option only for backward compatibility with old coverage files.
Interactions
The -
xprofile=tcov
option and the-xa
option 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 that have been compiled with-xa
. You cannot compile a single file with both options.The
-xa
option is incompatible with-g
.Warnings
If you compile and link in separate steps and you compile with
-xa
, be sure to link with-xa
, or you might get unexpected results.See also
-xprofile=tcov
,tcov
(1) man page, Analyzing Program Performance With Sun WorkShop3.2.92
-xar
When building a C++ archive that uses templates, it is necessary in most cases to include in the archive those template functions that are instantiated in the template database. Using this option automatically adds those templates to the archive as needed.
Examples
The following command line archives the template functions contained in the library and object files.
example%CC -xar -o libmain.a a.o b.o c.o
Warnings
Do not add
.o
files from the template database on the command line.Do not use the
ar
command directly for building archives. UseCC
-xar
to ensure that template instantiations are automatically included in the archive.See also
3.2.93
-xarch=
isaSpecifies the target instruction set architecture (ISA).
This option limits the code generated by the compiler to the instructions of the specified instruction set architecture by allowing only the specified set of instructions. This option does not guarantee use of any target-specific instructions.
Values
TABLE 3-29 gives the details for each of the
-xarch
keywords on SPARC platforms.
- SPARC instruction set architectures V7, V8, and V8a are all binary compatible.
- Object binary files (
.o
) compiled withv8plus
andv8plusa
can be linked and can execute together, but only on a SPARC V8plusa compatible platform.- Object binary files (
.o
) compiled withv8plus
,v8plusa
, andv8plusb
can be linked and can execute together, but only on a SPARC V8plusb compatible platform.-xarch
valuesv9
,v9a
, andv9b
are only available on UltraSPARC 64-bit Solaris environments.- Object binary files (
.o
) compiled withv9
andv9a
can be linked and can execute together, but will run only on a SPARC V9a compatible platform.- Object binary files (
.o
) compiled withv9
,v9a
, andv9b
can be linked and can execute together, but will run only on a SPARC V9b compatible platform.For any particular choice, the generated executable may run much more slowly on earlier architectures. Also, although quad-precision (
REAL*16
andlong
double
) floating-point instructions are available in many of these instruction set architectures, the compiler does not use these instructions in the code it generates.TABLE 3-30 gives the details for each of the
-xarch
keywords on IA platforms.
Defaults
If
-xarch
=isa is not specified,-xarch=generic
is assumed.Interactions
Although this option can be used alone, it is part of the expansion of the
-xtarget
option and may be used to override the-xarch
value that is set by a specific-xtarget
option. For example,-xtarget=ultra2
expands to-xarch=v8
-xchip=ultra2
-xcache=15/32/1:512/64/1
. In the following command-xarch=v8plusb
overrides the-xarch=v8
that is set by the expansion of-xtarget=ultra2
.
example%CC -xtarget=ultra2 -xarch=v8plusb foo.cc
Use of
-compat[=4]
with-xarch=v9
,-xarch=v9a
, or-xarch=v9b
is not supported.Warnings
If this option is used with optimization, the appropriate choice can provide good performance of the executable on the specified architecture. An inappropriate choice, however, might result in serious degradation of performance or in a binary program that is not executable on the intended target platform.
3.2.94
-xcache=
cSPARC: Defines 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.
Values
c must be one of the following values.
The definitions of the cache properties, si/li/ai, are 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.Defaults
If
-xcache
is not specified, the default-xcache=generic
is assumed. This value directs the compiler to use cache properties for good performance on most SPARC processors, without major performance degradation on any of them.Examples
-xcache=16/32/4:1024/32/1
specifies the following:
16 Kbytes 1024 Kbytes 32 bytes line size 32 bytes line size 4-way associativity Direct mapping associativity
See also
3.2.95
-xcg89
Warnings
If you compile and link in separate steps and you compile with
-xcg89
, be sure to link with the same option, or you might get unexpected results.3.2.96
-xcg92
Warnings
If you compile and link in separate steps and you compile with
-xcg92
, be sure to link with the same option, or you might get unexpected results.3.2.97
-xchip=
cSpecifies target processor for use by the optimizer.
The
-xchip
option specifies timing properties by specifying the target processor. This option affects:
- The ordering of instructions--that is, scheduling
- The way the compiler uses branches
- The instructions to use in cases where semantically equivalent alternatives are available
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.
Values
c must be one of the following values.
Defaults
On most SPARC processors,
generic
is the default value that directs the compiler to use the best timing properties for good performance without major performance degradation on any of the processors.3.2.98
-xcode=
aSPARC: Specifies the code address space.
Values
a must be one of the following values.
Defaults
For SPARC V8 and V7 processors, the default is
-xcode=abs32
.For SPARC and UltraSPARC processors, when you use
-xarch=
(v9
|v9a
|v9b
), the default is-xcode=abs64
.3.2.99
-xcrossfile
[=
n]SPARC: Enables optimization and inlining across source files.
Values
n must be one of the following values.
0
Do not perform cross-file optimizations or cross-file inlining. 1
Perform optimization and inlining across source files.
Normally the scope of the compiler's analysis is limited to each separate file on the command line. For example, when the
-xO4
option is passed, automatic inlining is limited to subprograms defined and referenced within the same source file.With
-xcrossfile
or-xcrossfile=1
, the compiler analyzes all the files named on the command line as if they had been concatenated into a single source file.Defaults
If
-xcrossfile
is not specified,-xcrossfile=0
is assumed and no cross-file optimizations or inlining are performed.
-xcrossfile
is the same as-xcrossfile=1
.Interactions
The
-xcrossfile
option is effective only when it is used with-xO4
or-xO5
.Warnings
The files produced from this compilation are interdependent due to possible inlining, and must be used as a unit when they are linked into a program. If any one routine is changed and the files recompiled, they must all be recompiled. As a result, using this option affects the construction of makefiles.
3.2.100 -
xF
If you compile with the
-xF
option and then run the Analyzer, you can generate a map file that shows an optimized order for the functions. A subsequent link to build the executable file can be directed to use that map by using the linker-M
mapfile 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 might not improve the overall performance of the application.
Interactions
The
-xF
option is only supported with-features=no%except
(-noex
).See also
analyzer
(1),debugger
(1),ld
(1) man pages3.2.101 -
xhelp=flags
Displays a brief description of each compiler option.
3.2.102 -
xhelp=readme
Displays contents of the online
README
file.The
README
file is paged by the command specified in the environment variable,PAGER
. IfPAGER
is not set, the default paging command ismore
.3.2.103 -
xildoff
Turns off the incremental linker.
Defaults
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.See also
-xildon
,ild
(1) man page,ld
(1) man page, Incremental Link Editor Guide3.2.104 -
xildon
Turns on the incremental linker.
This option is assumed if you use
-g
and not-G
, and you do not name any source file on the command line. Override this default by using the-xildoff
option.See also
-xildoff
,ild
(1) man page,ld
(1) man page, Incremental Link Editor Guide3.2.105 -
xlibmieee
Causes
libm
to return IEEE 754 values for math routines in exceptional cases.The default behavior of
libm
is XPG-compliant.See also
3.2.106 -
xlibmil
Inlines selected
libm
library routines for optimization.
Note This option does not affect C++ inline functions.
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.Interactions
This option is implied by the
-fast
option.See also
-fast
, Numerical Computation Guide3.2.107
-xlibmopt
Uses library of optimized math routines.
This option uses a math routine library optimized for performance and usually generates faster code. The results might 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.
Interactions
This option is implied by the
-fast
option.See also
3.2.108
-xlic_lib=sunperf
SPARC: Links in the Sun Performance LibraryTM.
This option, like
-l
, should appear at the end of the command line, after source or object files.See also
3.2.109
-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 compiler is not invoked, and a license is not checked out.
If a conflicting option is used, the latest one on the command line takes precedence, and a warning is issued.
Examples
Do not compile; report license information:
example%CC -c -xlicinfo any.cc
Compile; do not report license information:
example%CC -xlicinfo -c any.cc
3.2.110
-Xm
3.2.111
-xM
Outputs makefile dependency information.
Examples
The program
foo.cc
contains the following statement:
#include "foo.h"When
foo.c
is compiled with the-xM
, the output includes the following line:
foo.o : foo.hSee also
make
(1S) (for details about makefiles and dependencies)3.2.112
-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.3.2.113
-xMerge
SPARC: 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
.See also
3.2.114
-xnolib
Disables linking with default system libraries.
Normally (without this option), the C++ compiler links with several system libraries to support C++ programs. With this option, the
-l
lib options to link the default system support libraries are not passed told
.Normally, the compiler links with the system support libraries in the following order:
- Standard mode (default mode):
-lCstd -lCrun -lm -lw -lcx -lc
- Compatibility mode (-
compat
):
-lC -lm -lw -lcx -lc
The order of the
-l
options is significant. The-lm
,-lw
, and-lcx
options must appear before-lc
.
Note If the-mt
compiler option is specified, the compiler normally links with-lthread
just before it links with-lm.
To determine which system support libraries will be linked by default, compile with the
-dryrun
option. For example, the output from the following command:
example%CC foo.cc -xarch=v9 -dryrun
Includes the following in the output:
-lCstd -lCrun -lm -lw -lc
Note that when
-xarch=v9
is specified,-lcx
is not linked.Examples
For minimal compilation to meet the C application binary interface (that is, a C++ program with only C support required), use:
example%CC -xnolib test.cc -lc
To link
libm
statically into a single-threaded application with the generic architecure instruction set, use:
- Standard mode:
example%CC -xnolib test.cc -lCstd -lCrun -Bstatic -lm \
-Bdynamic -lw -lcx -lc
- Compatibility mode:
example%CC -compat -xnolib test.cc -lC -Bstatic -lm \
-Bdynamic -lw -lcx -lc
Interactions
Some static system libraries, such as
libm.a
andlibc.a
, are not available when linking with-xarch=v9
,-xarch=v9a
or-xarch=v9b
.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.If
-xnolib
is specified,-library
is ignored.Warnings
Many C++ language features require the use of
libC
(compatibility mode) orlibCrun
(standard mode).This set of system support libraries is not stable and might change from release to release.
In 64-bit compilation modes,
-lcx
is not present.See also
3.2.115
-xnolibmil
Cancels
-xlibmil
on the command line.Use this option with
-fast
to override linking with the optimized math library.3.2.116
-xnolibmopt
Does not use the math routine library.
Examples
Use this option after the
-fast
option on the command line, as in this example:
example%CC -fast -xnolibmopt
3.2.117
-xO
levelSpecifies optimization level. In general, program execution speed depends on level of optimization. The higher the level of optimization, the faster the speed.
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 might be significantly improved when it is compiled with an optimization level. Use of-xO2
(or the equivalent options-O
and-O2
) is recommended for most programs.Generally, the higher the level of optimization with which a program is compiled, the better the runtime performance. However, higher optimization levels can result in increased compilation time and larger executable files.
In a few cases,
-xO2
might perform better than the others, and-xO3
might outperform-xO4
. Try compiling 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. The optimizer resumes subsequent procedures at the original level specified in the
-xO
level option.There are five levels that you can use with
-xO
. The following sections describe how they operate on the SPARC platform and the IA platform.Values
-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 you are running out of swap space.-xO2
does basic local and global optimization, which includes:
- Induction-variable elimination
- Local and global common-subexpression elimination
- Algebraic simplification
- Copy propagation
- Constant propagation
- Loop-invariant optimization
- Register allocation
- Basic block merging
- Tail recursion elimination
- Dead-code elimination
- Tail-call elimination
- Complicated expression expansion
- This level does not optimize references or definitions for external or indirect variables. In general, this level results in minimum code size.
Note The-O
options is equivalent to the-xO2
option.
-xO3
, in addition to optimizations performed at the-xO2
level, also optimizes references and definitions for external variables. This level does not trace the effects of pointer assignments. When compiling either device drivers that are not properly protected byvolatile
or programs that modify external variables from within signal handlers, use-xO2
. In general,-xO
3 results in increased code size. If you are running out of swap space, use-xO2
.-xO4
does automatic inlining of functions contained in the same file in addition to performing-xO3
optimizations. This automatic inlining usually improves execution speed but sometimes makes it worse. In general, this level results in increased code size.-xO5
generates the highest level of optimization. It is suitable only for the small fraction of a program that uses the largest fraction of computer time. This level 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 Section 3.2.120 "-xprofile=p"."
-xO1
preloads arguments from memory and causes cross jumping (tail merging), as well as the single pass of the default optimization.-xO2
schedules both high- and low-level instructions and performs improved spill analysis, loop memory-reference elimination, register lifetime analysis, enhanced register allocation, global common subexpression elimination, as well as the optimization done by level 1.-xO3
performs loop strength reduction and inlining, as well as the optimization done by level 2.-xO4
performs architecture-specific optimization, as well as the optimization done by level 3.-xO5
generates the highest level of optimization. It uses optimization algorithms that take more compilation time or that do not have as high a certainty of improving execution time.Interactions
If you use
-g
or-g0
and the optimization level is-xO3
or lower, the compiler provides best-effort symbolic information with almost full optimization. Tail-call optimization and back-end inlining are disabled.If you use
-g
or-g0
and the optimization level is-xO4
or higher, the compiler provides best-effort symbolic information with full optimization.Debugging with
-g
does not suppress-xO
level, but-xO
level limits-g
in certain ways. For example, the-xO
level options reduce the utility of debugging so that you cannot display variables fromdbx
, but you can still use thedbx
where
command to get a symbolic traceback. For more information, see Debugging a Program Withdbx.
The
-xcrossfile
option is effective only if it is used with-xO4
or-xO5
.Warnings
If you optimize at
-xO3
or-xO4
with very large procedures (thousands of lines of code in a single procedure), the optimizer might require an unreasonable amount of memory. In such cases, machine performance can 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 thecsh
(1) man page). For example, to limit virtual memory to 16 megabytes:
example%limit datasize 16M
This command causes the optimizer to try to recover if it reaches 16 megabytes of data space.
The limit cannot be greater than the total available swap space of the machine, and should be small enough to permit normal use of the machine while a large compilation is in progress.
The best setting for data size depends on the degree of optimization requested, the amount of real memory, and virtual memory available.
To find the actual swap space, type:
swap -l
To find the actual real memory, type:
dmesg | grep mem
See also
-fast
,-xcrossfile=
n,-xprofile=
p,csh
(1) man page3.2.118
-xpg
The
-xpg
option compiles self-profiling code to collect data for profiling withgprof
. This option invokes a runtime recording mechanism that produces agmon.out
file when the program normally terminates.Warnings
If you compile and link separately, and you compile with
-xpg
, be sure to link with-xpg
.See also
-xprofile=
p,analyzer
(1) man page, Analyzing Program Performance With Sun WorkShop.3.2.119
-xprefetch
[=
a[,
a]]SPARC: Enable prefetch instructions on those architectures that support prefetch, such as UltraSPARC II (
-xarch=v8plus
,v8plusa
,v9plusb
,v9
,v9a
, orv9b
)a must be one of the following values.
Defaults
If
-xprefetch
is not specified,-xprefetch=no%auto,explicit
is assumed.If only
-xprefetch
is specified,-xprefetch=auto,explicit
is assumed.The default of
no%auto
is assumed unless explicitly overridden with the use of-xprefetch
without any arguments or with an argument ofauto
oryes
. For example,-xprefetch=explicit
is the same as-xprefetch=explicit,no%auto
.The default of
explicit
is assumed unless explicitly overridden with an argument ofno%explicit
or an argument ofno
. For example,-xprefetch=auto
is the same as-xprefetch=auto,explicit
.Interactions
The
sun_prefetch.h
header file provides the macros for specifying explicit prefetch instructions. The prefetches will be approximately at the place in the executable that corresponds to where the macros appear.To use the explicit prefetch instructions, you must be on the correct architecture, include
sun_prefetch.h
, and either exclude-xprefetch
from the compiler command or use-xprefetch=explicit
or-xprefetch=yes
.If you call the macros and include the
sun_prefetch.
h header file, but pass-xprefetch=no%explicit
or-xprefetch=no
, the explicit prefetches will not appear in your executable.With
-xprefetch
,-xprefetch=auto
, and-xprefetch=yes
, the compiler is free to insert prefetch instructions into the code it generates. This may result in a performance improvement on architectures that support prefetch.Warnings
Explicit prefetching should only be used under special circumstances that are supported by measurements.
3.2.120
-xprofile=
pCollects or optimizes with runtime profiling data.
This option causes execution frequency data to be collected and saved during the execution. The data can then be used in subsequent runs to improve performance. This option is valid only when a level of optimization is specified.
Values
p must be one of the following values.
Interactions
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 other files compiled with-xa
. You cannot compile a single file with both options.The code coverage report produced by
-xprofile=tcov
can be unreliable if there is inlining of functions due to use of-xO4
.Warnings
If compilation and linking are performed in separate steps, the same
-xprofile
option must appear in the compile as well as the link step.See also
-xa
,tcov
(1) man page, Analyzing Program Performance With Sun WorkShop3.2.121
-xregs=
r[,...r]SPARC: Controls scratch register usage.
The compiler can generate faster code if it has more registers available for temporary storage (scratch registers). This option makes available additional scratch registers that might not always be appropriate.
Values
r must be one of the following values. The meaning of each value depends upon the
-xarch
setting.
Defaults
If
-xregs
is not specified,-xregs=appl,float
is assumed.Examples
To compile an application program using all available scratch registers, use
-xregs=appl,float
.To compile non-floating-point code that is sensitive to context switch, use
-xregs=no%appl,no%float
.See also
3.2.122
-xs
Allows debugging by
dbx
without object (.o
) files.This option disables Auto-Read for
dbx
. Use this option if you cannot keep the.o
files. This option passes the-s
option 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, anddbx
initializes more slowly.Auto-Read is the newer and default way of loading symbol tables. With Auto-Read the information is placed in the
.o
files, so thatdbx
loads the symbol table information only if 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 (.o
) files to usedbx
.Without
-xs
, if you move the executables to another directory, you must move both the source files and the object (.o
) files to usedbx
.3.2.123
-xsafe=mem
SPARC: Allows no memory-based traps to occur.
This option grants permission to use the speculative load instruction on V9 machines.
Interactions
This option is only effective if used with
-xO5
optimization when-xarch=v8plus
,v8plusa
,v8plusb
,v9
,v9a
, orv9b
is specified.Warnings
You should use this option only 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 handle exceptional conditions, this assertion is not safe.
3.2.124
-xsb
Produces information for the Sun WorkShop source browser.
This option causes the
CC
driver to generate extra symbol table information in theSunWS_cache
subdirectory for the source browser.See also
3.2.125
-xsbfast
Produces only source browser information, no compilation.
This option runs only the
ccfe
phase to generate extra symbol table information in theSunWS_cache
subdirectory for the source browser. No object file is generated.See also
3.2.126
-xspace
SPARC: Does not allow optimizations that increase code size.
3.2.127
-xtarget=
tSpecifies the target platform for instruction set and optimization.
The performance of some programs can benefit by providing the compiler with an accurate description of the target computer hardware. When program performance is critical, the proper specification of the target hardware could be very important. This is especially true when running on the newer SPARC processors. However, for most programs and older SPARC processors, the performance gain is negligible and a generic specification is sufficient.
Values
On SPARC platforms, t must be one of the following values.
native
Gets the best performance on the host system.
The compiler generates code optimized for the host system. It determines the available architecture, chip, and cache properties of the machine on which the compiler is running.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.platform-name Gets the best performance for the specified platform.
Select a SPARC platform name from TABLE 3-34.
The following table details the
-xtarget
SPARC platform names and their expansions.
On IA platforms,
-xtarget
accepts the following values:
native
orgeneric
386
--Directs the compiler to generate code for the best performance on the Intel 80386 microprocessor.486
--Directs the compiler to generate code for the best performance on the Intel 80486 microprocessor.pentium
--Directs the compiler to generate code for the best performance on the Pentium or Pentium Pro microprocessor.pentium_pro
--Directs the compiler to generate code for the best performance on the Pentium Pro microprocessor.Defaults
On both SPARC and IA devices, if
-xtarget
is not specified,-xtarget=generic
is assumed.Expansions
The
-xtarget
option is a macro that permits a quick and easy specification of the-xarch
,-xchip
, and-xcache
combinations that occur on commercially purchased platforms. The only meaning of-xtarget
is in its expansion.Examples
-xtarget=sun4/15
means-xarch=v8a -xchip=micro -xcache=2/16/1
Interactions
Compilation for SPARC V9 architecture indicated by the
-xarch=v9
|v9a
|v9b
option. Setting-xtarget=ultra
orultra2
is not necessary or sufficient. If-xtarget
is specified, the-xarch=v9
,v9a
, orv9b
option must appear after the-xtarget
. For example:
-xarch=v9 -xtarget=ultraexpands to the following and reverts the
-xarch
value tov8
.
-xarch=v9 -xarch=v8 -xchip=ultra -xcache=16/32/1:512/64/1The correct method is to specify
-xarch
after-xtarget
. For example:
-xtarget=ultra -xarch=v93.2.128
-xtime
Causes the
CC
driver to report execution time for the various compilation passes.3.2.129
-xunroll=
nEnables unrolling of loops where possible.
This option specifies whether or not the compiler optimizes (unrolls) loops.
Values
When n is
1
, it is a suggestion to the compiler to not unroll loops.When n is an integer greater than 1,
-unroll=
n causes the compiler to unroll loops n times.3.2.130
-xvector
[=
(yes
|no
)]SPARC: Enable automatic calls to the SPARC vector library functions.
Defaults
The compiler defaults to
-xvector=no
. Specifying-xvector
by itself defaults to-xvector=yes
.Warnings
If you compile and link in separate steps, you must use the same
-xvector
settings in each step.3.2.131
-xwe
Converts all warnings to errors by returning nonzero exit status.
3.2.132
-z
argLink editor option. For more information, see the
ld
(1) man page and the Solaris Linker and Libraries Guide.3.2.133
-ztext
Forces a fatal error if any relocations remain against nonwritable, allocatable sections.
Sun Microsystems, Inc. Copyright information. All rights reserved. Feedback |
Library | Contents | Previous | Next | Index |