/Intel(R) C++ Compiler 10.0 for Linux*
Beta Release Notes/
Contents
* Overview
* What's New
* System Requirements
* Installation
* Known Issues
* Technical Support
* Documentation
* Additional Information
* Disclaimer and Legal Information
Overview
This product provides tools for Linux* software developers to create
applications to run at top speeds on all Intel(R) IA-32 processors, Intel
processors with Intel(R) Extended Memory 64 Technology (Intel(R) 64) and the
Intel Itanium(R) processors. Optimizations include support for Intel(R)
Streaming SIMD Extensions 2 (SSE2) in the Intel Pentium(R) 4 and Intel
Pentium(R) M processors, Intel(R) Streaming SIMD Extensions 3 (SSE3) in the
Intel Pentium 4 and Intel(R) Core(TM) processors with SSE3 support, and
software pipelining in the Intel Itanium(R) 2 processor. Inter-procedural
optimization (IPO) and profile-guided optimization (PGO) can provide
greater application performance. Intel Compilers support multi-threaded
code development through autoparallelism and OpenMP* support.
Additional information on the Intel Software Development Products is
available at http://www.intel.com/software/products/
.
Product Contents
This product contains the following components:
* Intel(R) C++ Compiler for IA-32 applications
* Intel(R) C++ Compiler for IA-64 applications
* Intel(R) C++ Compiler for Intel(R) 64 architecture applications
* Substitute headers for use with the Intel C++ Compiler
* Intel(R) Assembler for IA-64 applications
* Intel(R) Debugger (See separate Release Notes)
* Intel(R) C++ compiler integration into Eclipse* and the C/C++
Development Tools* (CDT) (IA-32 and IA-64 only)
* Utilities
o Intel(R) Compilers code-coverage tool
o Intel(R) Compilers test-prioritization tool
* On-disk documentation
o The documentation index is provided for easy access of all
the documents. It is located at
|/doc/Doc_Index.htm|
Eclipse* Integrated Development Environment (IA-32 and IA-64
Systems Only)
The Intel(R) C++ Compiler for Linux includes a compiler integration into
Eclipse*, version 3.2.x, and the C/C++ Development Tools* (CDT), version
3.1.x.
Eclipse is an open source software development project dedicated to
providing a robust, full-featured, commercial-quality, industry platform
for the development of highly integrated tools. It is an extensible,
open source Integrated Development Environment (IDE).
The CDT (C/C++ Development Tools) project is dedicated to providing a
fully functional C/C++ IDE for the Eclipse platform. CDT is layered on
Eclipse, and provides a C/C++ development environment perspective.
The Intel C++ Compiler integration with the Eclipse/CDT IDE lets you
develop, build, and run your Intel C/C++ projects in a visual,
interactive environment.
* See Also *
* http://www.eclipse.org/ for further information about Eclipse
* http://www.eclipse.org/cdt/ for further information about CDT
What's New in Version 10.0
The following section discusses new features and changes in the Intel
C++ Compiler version 10.0 and updates to 10.0. Please see the separate
release notes for the Intel Debugger.
New and Changed Command Line Options
The following is a listing of command line options that are new or have
changed since the initial version 9.1 release. Please refer to the
compiler documentation for more information on these options.
|-alias-const[-]|
Determines whether the input/output buffer rule is applied to
functions with pointer-type arguments. (Default: off)
|-[no-]check-uninit|
Determines whether run-time checking occurs for uninitialized
variables. (Default: off)
|-cxxlib-nostd|
Prevents the compiler from linking with the standard C++ library.
(Default: off)
|-diag- |
Controls the display of diagnostic information (Default: off)
|-diag-dump|
Tells the compiler to print all enabled diagnostic messages and stop
compilation (Default: off)
|-diag-enable sv-include|
Specifies that include files should also be considered by the Static
Verifier
|-[no-]diag-id-numbers |
Tells the compiler to display diagnostic messages by using their ID
number values (Default: on)
|-fargument-noalias-global|
Specifies that arguments do not alias each other and do not alias
global storage. (Default: off)
|-fast|
Enables a set of options for improved performance. The options have
changed in this release. Please see note below.
|-f[no-]exceptions|
Enables exception handling table generation (Default: on for C++,
off for C)
|-f[no-]instrument-functions|
Determines whether function entry and exit points are instrumented
(Default: off)
|-f[no]-keep-static-consts|
Tells the compiler to preserve allocation of variables that are not
referenced in the source (Default: off)
|-fmudflap|
Tells the compiler to instrument risky pointer operations to prevent
buffer overflows and invalid heap use (Default: off)
|-fp-speculation=|
Tells the compiler the mode in which to speculate on floating-point
operations (Default: fast)
|-[no-]func-groups |
Enables or disables function grouping if profiling information is
enabled. (IA-32 and Intel(R) 64 only, default: off)
|-gcc-sys|
Defines GNU macros only during compilation of system headers.
(Default: off)
|-help [category]|
Displays all available compiler options or a category of compiler
options (Default: off)
|-ipo-jobs|
Specifies the number of commands (jobs) to be executed
simultaneously during the link phase of Interprocedural Optimization
(IPO)
|-nostdinc++|
Prevents the compiler from searching for header files in the
standard directories for C++; causes it to search the other standard
directories. (Default: off)
|-[no-]opt-class-analysis|
Tells the compiler to use C++ class hierarchy information to analyze
and resolve C++ virtual function calls at compile time (Default off)
|-par-schedule-[[]n]|
Specifies a scheduling algorithm for DO loop iterations
|-save-temps[-]|
Tells the compiler to save intermediate files created during
compilation (Default: off)
|-shared-intel|
Causes Intel-provided libraries to be linked in dynamically
(Default: all libraries linked statically except |libguide|)
|-shared-libgcc|
Links the GNU libgcc library dynamically. (Default: off)
|-static-intel|
Causes Intel-provided libraries to be linked in statically (Default:
all libraries linked statically except |libguide|)
|-static-libgcc|
Links the GNU libgcc library statically. (Default: off)
|-tcheck []|
Indicates the method of analysis to be performed for OpenMP threaded
applications (Default: off)
|-tcollect|
Inserts instrumentation probes calling the Intel(R) Trace Collector
API (Default: off)
|-trigraphs|
Supports ISO C trigraphs; also enabled in ANSI and C99 modes.
(Default: off)
|-Weffc++|
Enables warnings based on certain C++ programming guidelines.
(Default: off)
|-W[no-]missing-declarations|
Enables warnings for global functions and variables without prior
declaration. (Default: off)
|-Wnon-virtual-dtor|
Issue a warning when a class appears to be polymorphic, yet it
declares a non-virtual one. (Default: off)
|-Wreorder |
Issue a warning when the order of member initializers does not match
the order in which they must be executed. (Default: off)
|-W[no-]strict-prototypes|
Enables warnings for functions declared or defined without specified
argument types. (Default: off)
|-Wunused-variable|
Enables warnings for functions declared or defined without specified
argument types. (Default: off)
|-xO|
Specifies that the compiler is to generate SSE3, SSE2 and SSE
instructions and to optimize for the Intel(R) Pentium(R) 4 processor and
Intel(R) Xeon(R) processor with SSE3.
Deprecated and Removed Command Line Options
For information on command line options that are either deprecated
(still functional but to be removed in a future version) or removed (no
longer supported), please refer to the section /Compiler Options/ >
/Deprecated and Removed Compiler Options/ in the on-disk documentation.
Alternate Command Line Options
Many command line options have an older spelling where underscores (?_?)
instead of hyphens (?-?) connect the words in the option name. The older
spelling is still a valid alternate option name.
Syntax of |-diag-file| Changed
The syntax of the |-diag-file| command line option has changed from
earlier beta versions of the 10.0 compiler. Previously, the syntax was:
|-diag-file [/filename/]|
It is now:
|-diag-file[=/filename/] |
An equal sign now separates the filename from the option name rather
than a space. This change was required to eliminate ambiguity if the
filename was omitted but the option was followed by other text on the
command line.
Meaning of |-fast| Changed ||
The |-fast| option is a shorter way of specifying a set of options that
generally improve run-time performance. As documented, the set of
options may change over time. In version 10.0, |-fast| sets |-xT|,
whereas in earlier versions it set |-xP|. If this change is not
appropriate for you, you must specify the individual options you want
instead of using |-fast|. Please see the Compiler Options section of the
on-disk documentation for further information.
New Optimized Exception Handling Implementation
This version features a complete new design of exception handling with
simpler internal presentation to provide more opportunities for
optimization. Improvements include:
* Improved inlining in the presence of exception handling
* Improved exception handling control flow
* Improved optimization opportunities such as constant propagation
* Smaller code size
* More opportunity for parallelization
"Mudflap" Pointer Use Checking
"Mudflap" is a pointer user checking technology based on compile-time
instrumentation. It adds protective code to a variety of potentially
unsafe C/C++ constructs that detect actual erroneous uses at run time.
The class of errors detected includes:
* NULL pointer dereferencing
* Running off the ends of buffers and strings
* Leaking memory
C++ Rapid Type Analysis
C++ Rapid Type Analysis uses C++ class hierarchy information to provide
information to the compiler so that it can resolve more virtual function
targets at compile time thus improving performance.
New Manual CPU Dispatch /cpuid/ Code
The |cpu_dispatch| and |cpu_specific| keywords now accept the cpuid code
|core_2_duo_ssse3| for Intel(R) Core(TM)2 Duo processors and Intel(R) Xeon(R)
processors with Supplemental Streaming SIMD Extensions 3 (SSSE3).
Improved Parallelizer and Vectorizer
This version features a complete redesign of the optimizer that
integrates parallelization (IA-32, Intel(R) 64 and IA-64) and
vectorization (IA-32 and Intel(R) 64) at |O2| and |O3| optimization levels
with memory and loop optimizations.
Performance can be substantially improved by:
* Generation of more efficient multi-threaded code
* Generation of more efficient SIMD code
* Enhanced loop transformations
New and Enhanced Optimization Reports for Advanced Loop
Transformations
Loop Transformation (HLO) Optimization reports tell you why the compiler
was unable to apply loop interchange transformations on a set of loops
and suggests loop interchange if the reported bottlenecks can be removed
by source changes. These reports have been enhanced to provide more
detailed information and to be easier to understand.
Static Verifier
Static Verifier is a new compiler feature which performs static analysis
of a program across multiple source files. It can detect different kinds
of defects and doubtful or inconsistent uses of language features in
user code and report them according to their severity level. Static
Verifier understands C/C++ and Fortran code and can also perform
analysis of OpenMP directives.
In this release, when Static Verifier is enabled the linker is not
invoked so an executable or static/dynamic link library is not produced,
object files that were produced as a result of invocation of Static
Verifier are not valid and should not be used for generating of real
executable or static/dynamic link libraries. The current usage model is
that Static Verifier is added as an alternate build option to produce a
diagnostic report.
For more information, please refer to the section on Building
Applications > Error Handling > Handling Compile Time Errors > using
Static Verification Diagnostic Options in the on-disk documentation.
NOTE: In this update semantics of values for the following Static
Verifier's options has been changed: |/Qdiag-enable:sv[{1|2|3}]| (for
Windows) and |-diag-enable sv[{1|2|3}]| (for Linux and MacOS). The
meaning of values |sv[{1|2|3}]| has been changed from level of analysis
(brief, default/medium, verbose) to severity level of analysis ("all
critical errors", "all errors", "all errors and warnings")
correspondingly. The changed semantics give a more flexible way to
filter messages from the Static Verifier by severity level, where
severity levels are specified as:
* |sv1| - "all critical errors": obvious or possible user mistakes
connected to security vulnerability issues such as buffer
overflow, NULL pointer/uninitialized pointer dereferences,
uninitialized objects, memory leaks.
* |sv2| - "all errors": all obvious or possible serious user
mistakes including "all critical errors" and other types of errors
such as inconsistent declarations of program units, incorrect
usage/modification of objects, incorrect usage of OpenMP
directives and etc.
* |sv3| - "all errors and warnings": all obvious or possible user
mistakes and doubtful design issues, recommendations on better
coding style and usage of language features.
Using Static Verifier in the Eclipse* IDE
When Static Verifier support is enabled within the IDE, the customary
final build target (e.g. an executable image) is not created. As such,
we recommend that a separate "Static Verification" configuration be
created, by cloning the existing Debug (development) configuration, for
use when static verification is desired.
* Open the property pages for the project and select "C/C++ Build".
* Click the "Manage?" button
* In the "Manage" dialog, click the "New?" button to open the
"Create configuration" dialog.
* Supply a name for the new configuration in the "Name" box.
* Supply a "Description" for the configuration if you want (optional).
* You can choose to "Copy settings from" a "Default configuration"
or an "Existing configuration" by clicking the appropriate radio
button and then selecting a configuration from the corresponding
drop down menu.
* Click "O.K." to close the "Create configuration" dialog.
* Click "O.K." to close the "Manage" dialog (with your new
configuration name selected).
* The property pages will now be displaying the settings for your
new configuration and it is now the active build configuration.
* Navigate to the Intel compiler's Compilation Diagnostics
properties. Use the "Level of Static Analysis" and "Analyze
Included Files" properties to control Static Verification.
Provisions for Eclipse* Support
The compiler and debugger integrations into Eclipse* and the C/C++
Development Tools* (CDT) are provided for the 10.0 Intel C++ compiler
and idb debugger. However, the common Eclipse* base components (the
Eclipse* Platform Binary, Eclipse* C/C++ Development Tools* (CDT), and a
JRE), which are required by the compiler and debugger integrations, are
no longer provided on the compiler kit. Detailed instructions for freely
obtaining these common components are provided in the Installation Guide.
We have verified the 10.0 Intel integration support with:
* Eclipse* version 3.2.1
* C/C++ Development Tools* (CDT) version 3.1.1
* JRockit 5.0 JRE from BEA Systems Inc
but any instance of Eclipse* version 3.2.x, C/C++ Development Tools*
(CDT, version 3.1.x and a JRE (or Java Platform) that Eclipse* version
3.2.1 claims to support should function properly.
For additional information on Eclipse* version 3.2.1, see the Eclipse*
release notes and readme at the following URL's:
http://www.eclipse.org/eclipse/development/readme_eclipse_3.2.1.html
http://download.eclipse.org/eclipse/downloads/drops/R-3.2.1-200609210945/index.php
|libimf| Linking Change on Intel(R) 64
In some earlier versions of Intel C++ Compiler, applications built for
Intel(R) 64 linked by default to the dynamic (shared object) version of
|libimf|, even though other libraries were linked statically. In the
current version, |libimf| is linked statically unless |-shared-intel| is
used. This matches the behavior on IA-32 systems. You should use
|-shared-intel| to specify the dynamic Intel libraries if you are
linking against shared objects built by Intel compilers.
A side effect of this change is that users may see the following message
from the linker:
|warning: feupdateenv is not implemented and will always fail|
This warning is due to a mismatch of library types and can be ignored.
The warning will not appear if |-shared-intel| is used.
New |-early-template-check| Switch
Even though recent versions of g++ (3.4 and newer) parse template
definitions, they do very little semantic checking of such definitions.
Most of the semantic checking is delayed until an actual instantiation
is done. As a result, g++ accepts certain unusable templates provided
they are not actually used in the program. A new option is available
(|-early-template-check|) to allow Intel C++ users to check the
semantics of function template prototypes before instantiation.
Example:
|class A {};
template struct B {
B () {}; // error with -early-template-check): no initializer for
// reference member "B::a"
A& a;
};|
Note that this switch will work in gcc 3.4 and later compatibility modes
only (i.e. |-gcc-version=340| and later).
|-ansi| no longer implies |-fp-port|
In previous versions of the compiler, the |-ansi| switch implied
-fp-port. In version 10.0, |-ansi |no longer implies |-fp-port|. As a
result, the compiler generates more efficient floating-point code under
|-ansi|, especially when using x87 instructions to implement FP
calculations. Use |-fp-port| in addition to |-ansi| if it is important
to round FP data to source precision at assignments and casts.
|-cxxlib-icc| no longer supported for C++
This release requires using the GNU g++* C++ libraries when linking C++
applications, rather than those from Dinkumware* supported in previous
releases. As a result of this change, this release requires systems with
gcc 3.2 or higher installed.
Initializing Variables of Type |__m64| in Intel(R) 64-based
Applications
The |__m64| data type used to be treated as a scalar, at least to the
extent of being able to statically initialize |__m64| data with an
integer literal. But for compatibility with directions being taken by
other compilers supporting MMX(TM), we are dropping support for that
feature. As a result, an initializer for a variable of |__m64| type must
be enclosed in braces. If your application uses a scalar to initialize
such variables, the compiler will give an error message such as:
|error: a value of type "unsigned long long" cannot be used to
initialize an entity of type "const __m64"|
System Requirements
Processor Terminology
Intel compilers support three platforms: general combinations of
processor and operating system type. This section explains the terms
that Intel uses to describe the platforms in its documentation,
installation procedures and support site.
*IA-32*
IA-32 (Intel Architecture, 32-bit) refers to systems based on 32-bit
processors supporting at least the Pentium(R) II instruction set, (for
example, Intel(R) Core(TM) processor or Intel(R) Xeon(R) processor), or
processors from other manufacturers supporting the same instruction
set, running a 32-bit operating system ("Linux x86").
*Intel(R) 64 *
Intel(R) 64 (formerly Intel(R) EM64T) refers to systems based on IA-32
processors which have 64-bit architectural extensions, (for example,
Intel(R) Core(TM)2 processor or Intel(R) Xeon(R) processor), running a 64-bit
operating system ("Linux x86_64"). If the system is running a 32-bit
version of the Linux operating system, then IA-32 applies instead.
Systems based on the AMD* Athlon64* and Opteron* processors running
a 64-bit operating system are also supported by Intel compilers for
Intel(R) 64-based applications.
*IA-64*
Refers to systems based on the Intel Itanium(R) 2 processor running a
64-bit operating system.
Native and Cross-Platform Development
The term "native" refers to building an application that will run on the
same platform that it was built on, for example, building on IA-32 to
run on IA-32. The term "cross-platform" or "cross-compilation" refers to
building an application on a platform type different from the one on
which it will be run, for example, building on IA-32 to run on IA-64.
Not all combinations of cross-platform development are supported and
some combinations may require installation of optional tools and libraries.
The following list describes the supported combinations of compilation
host (system on which you build the application) and application target
(system on which the application runs).
IA-32 Host
Supported target: IA-32
Intel(R) 64 Host
Supported targets: IA-32 and Intel(R) 64
IA-64 Host
Supported target: IA-64
*Note:* Development for a target different from the host may require
optional library components to be installed from your Linux Distribution.
*Note:* Intel(R) Cluster OpenMP* is a separately licensed feature and has
different system requirements from that of the compilers. Please refer
to the Intel Cluster OpenMP documentation for further details.
Requirements to develop IA-32 applications
* A system based on an IA-32 processor (minimum 450 MHz Intel
Pentium(R) II processor or greater - Intel(R) Core(TM)2 processor or
Intel(R) Pentium(R) 4 processor recommended), Intel(R) 64 architecture
processor, or a system based on an AMD* Athlon* or AMD Opteron*
processor
* 256 MB of RAM (512MB recommended).
* 100 MB of disk space, plus an additional 200 MB during
installation for the download and temporary files.
* Linux system with glibc 2.2.93, 2.3.2 , 2.3.3, 2.3.4, or 2.3.5 and
the 2.4.X or 2.6.X Linux kernel as represented by the following
distributions. *Note:* Not all distributions listed are validated
and not all distributions are listed.
o Fedora* Core 5
o Mandriva* Linux 2007
o Red Flag* DC Server 5.0
o Red Hat Enterprise Linux* 3, 4
o SUSE LINUX Enterprise Server* 9, 10
o TurboLinux* 10
* Linux Developer tools component installed, including gcc 3.2 or
later, g++ and related tools.
* Linux component |compat-libstdc++| providing |libstdc++.so.5 |
Requirements to Develop Applications for Intel(R) 64 Architecture
Systems or for AMD* Opteron* Processors
* A system based on an IA-32 or Intel(R) 64 architecture processor
(Intel(R) Core(TM)2 processor or Intel(R) Xeon(R) processor recommended),
or based on an AMD Opteron processor
* 256 MB of RAM (512 MB recommended)
* 300 MB free hard disk space, plus an additional 300 MB during
installation for download and temporary files.
* 100 MB of hard disk space for the virtual memory paging file. Be
sure to use at least the minimum amount of virtual memory
recommended for the installed distribution of Linux
* Linux system with glibc 2.2.93, 2.3.2 , 2.3.3, 2.3.4, or 2.3.5 and
the 2.4.X or 2.6.X Linux kernel as represented by the following
distributions. *Note:* Not all distributions listed are validated
and not all distributions are listed.
o Fedora* Core 5
o Mandriva* Linux 2007
o Red Flag* DC Server 5.0
o Red Hat Enterprise Linux* 3, 4
o SGI* ProPack* 4, 5
o SUSE LINUX Enterprise Server* 9, 10
o TurboLinux* 10
* Linux Developer tools component installed, including gcc 3.2 or
later, g++ and related tools.
* Linux component |compat-libstdc++| providing |libstdc++.so.5 |
Requirements to Develop IA-64 Applications
* A system based on an Intel(R) Itanium(R) 2 processor.
* 512 MB of RAM (1 GB recommended).
* 150 MB of disk space, plus an additional 200 MB during
installation for the download and temporary files.
* Linux system with glibc 2.2.93, 2.3.2 , 2.3.3, 2.3.4, 2.3.5 or 2.4
and the 2.4.X or 2.6.X Linux kernel as represented by the
following distributions. *Note:* Not all distributions listed are
validated and not all distributions are listed.
o Red Flag* DC Server 5.0
o Red Hat Enterprise Linux* 3, 4
o SGI* ProPack* 5
o SUSE LINUX Enterprise Server* 9, 10
o TurboLinux* 10
* Linux Developer tools component installed, including gcc 3.2 or
later, g++ and related tools.
* Linux component |compat-libstdc++| providing |libstdc++.so.5 |
Note on gcc Versions
The Intel compilers are tested with a number of different Linux
distributions, with different versions of gcc. If you are using any of
gcc 3.2.3, 3.3.3, 3.3, 3.2, 3.4, 4.0, 4.1, you can expect to be
successful. However the version of binutils can impact your experience:
later ones are generally better and we recommend using at least 2.14.
Some Linux distributions may contain header files different from those
we have tested, which may cause problems. The version of glibc you use
must be consistent with the version of gcc in use.
*Notes:*
* Compiling very large source files (several thousands of lines)
using advanced optimizations such as |-O3, -ipo| and |-openmp|,
may require substantially larger amounts of RAM.
* The above lists of processor model names are not exhaustive -
other processor models correctly supporting the same instruction
set as those listed are expected to work. Please contact Intel(R)
Premier Support if you have questions regarding a specific
processor model
* Some optimization options have restrictions regarding the
processor type on which the application is run. Please see the
documentation of these options for more information.
Use of the Eclipse* Integrated Development Environment on Red Hat
Enterprise Linux AS 2.1 has the following additional requirements:
* Red Hat AS 2.1 Update 6
* Mozilla 1.4 Xft or higher (up to 1.7)
* For users of the GTK* window system: version 2.2.1 of the GTK+
widget toolkit and associated libraries (GLib, Pango) should be
installed.
Installation
Please see the separate Installation Guide for information
on installing the compiler and setting up the compiler environment. The
default installation directories, referred to elsewhere in this document
as || and ||, are:
* |/opt/intel/cc/10.0.xxx| (for IA-32 and Itanium)
* |/opt/intel/cce/10.0.xxx| (for Intel(R) 64)
* |/opt/intel/idb/10.0.xxx | (for IA-32 and Itanium)
* |/opt/intel/idbe/10.0.xxx| (for Intel(R) 64)
Known Issues
Binary Incompatibility for OpenMP Applications
Programs compiled with the Intel Compiler version 9.0 using the
|-openmp| switch may not run after installing the Intel Compiler version
10.0. For such programs, the loader may exit at run time with an error
message about undefined symbols beginning with the string |_intel| (for
example, |_intel_fast_memset|). If this occurs, please recompile the
executable using the Intel Compiler version 10.0 and the loader error
message should disappear.
Header Incompatibility with RedHat* Enterprise Linux* 3, Update
4 (also SGI* ProPack* 3 Service Pack 5)
In Update 4 to RedHat Enterprise Linux 3, inline assembly code was added
to the file
|/usr/include/c++/3.2.3/ia64_redhat-linux/bits/os_defines.h|. This
causes the Intel C++ Compiler to fail to compile sources referencing
this header. Note that this problem is not known to exist for any other
version of Linux, including earlier versions of EL3 or beta versions of
the next major release of RedHat Enterprise Linux. This issue also
affects SGI ProPack 3 Service Pack 5.
A modified header file which corrects this problem is available from
http://www.intel.com/software/products/compilers/downloads/os_defines.h.90
A good place to put the modified file is in the substitute headers
directory of your installed compiler. For example,
|/substitute_headers/c++/bits/os_defines.h|. The path must
end with |bits/os_defines.h|. If you place it there the compiler will
find it automatically. You should find an existing installer-created
directory |/substitute_headers| and should create the
sub-directory path |c++/bits| underneath it.
|-ipo_obj| option Is no longer supported
The |-ipo_obj| option, which forced generation of direct object code, is
no longer supported. If the option is specified, a warning is given and
the effect is as if |-ip| was specified instead.
OpenMP limitations
*
POSIX threaded programs that require a large stack size may not
run correctly on some versions of Linux because of hard-coded
stack size limits in some versions of the Linux POSIX threads
libraries. These limits also apply to OpenMP programs (-openmp)
and automatically generated parallel programs (|-parallel| ) with
the Intel compilers, because the Intel compilers use the POSIX
threads library to implement OpenMP based and automatically
generated parallelism. Threaded programs that exceed the stack
space limit usually experience segmentation violations or
addressing errors.
To avoid these limitations, use a version of glibc built with the
|FLOATING_STACKS| parameter defined. For some distributions, this
implies using the shared rather than the static version of the
pthreads library. Then use the |ulimit -s| or |limit stacksize|
command to set the maximum shell stack size to an explicit large
value, in units of KBytes, (not |unlimited|), and also set the
|KMP_STACKSIZE| environment variable to the needed thread
stacksize in bytes. Note, in the bash shell, |ulimit -s| can be
used to set a large maximum stack size only once. In the C shell
(csh), |limit stacksize| , with no dash before the argument, can
be used to reset the maximum stacksize repeatedly.
This solution has been tested on glibc version 2.2.4-13 for IA-32
and glibc 2.2.4-19 for the Itanium Processor Family as found in
the Red Hat 7.2 Linux distribution. For glibc 2.2.4-13 on IA-32,
the shared version of the POSIX threads library must be used,
(there should not be a |-static| flag in the compiler .cfg file or
on the command line).
*
It is noted that Linux thread local storage (TLS) is not fully
supported by the default installations of |/usr/lib/libpthread.a|
and |/usr/lib/libc.a| on certain versions of Linux (RedHat
Enterprise Linux 4 and earlier are known examples). When using the
Linux TLS mechanism and linking with |-static|, the inclusion of
|-openmp| or calls to |libpthread| may trigger a runtime failure
when trying to access thread local storage. To fix this problem,
install the |nptl-devel.rpm| package (included on the Linux
installation CD) and compile with |-L/usr/lib/nptl|.
Compile time slow down when using both |-g| and inlining
There will be an increase in compile time when |-g| is used together
with inlining. Inlining can happen if the user specifies |-ipo, -ip| or
compiles a |C++/C99| program at option levels |-O1| or above. This is
due to the generation of debug information. For many applications, this
combination of compiler options will not increase compile time or
compile-time memory use.
Compiler hang on version query on glibc 2.2.4-26
We have identified a problem with glibc version 2.2.4-26 that shipped
with the original version of Red Hat AS2.1. This version causes a
compiler hang on the command "icc -v or icc -V (with no files to
compile). Upgrading to glibc 2.2.4-31.7 fixes the problem. If you have
taken any updates to your AS2.1 you will not see this problem. There was
also a respin of the original AS2.1 that fixed this problem so only if
you have a very early installation of AS2.1 that has never been updated
will you see this issue.
Incorrect output or miscompare on SPEC* CPU2006* 471.omnetpp on
x86_64 systems
We have identified a problem with the gcc binutils linker in some Linux
distributions for x86_64 (Intel(R) 64 and similar) systems. This problem
manifests itself when running the SPEC* CPU2006* benchmark test
471.omnetpp, resulting in incorrect output, and has been reproduced
using varying versions of the Intel C++ compiler as well as with gcc.
Not all Linux distributions have the affected linker. The Bugzilla
reports for this problem are
http://sourceware.org/bugzilla/show_bug.cgi?id=2655 and
http://sourceware.org/bugzilla/show_bug.cgi?id=2657
Please contact your Linux distributor to find out if your distribution
has the affected linker.
|-relax| no longer passed to linker on Intel Itanium-based systems
As of version 10.0, the compiler driver no longer passes the |-relax|
switch to the linker on Itanium-based systems, as this conflicts with
the |-r| option. The -relax option is not needed as it is the default
when using binutils 2.11.90.0.27 or later - 2.14 is recommended. If you
must use an older binutils and wish to specify the |-relax| option, use
|-Xlinker -relax| on the compile command which invokes the linker.
|ld| warning about |libunwind.so.7| on SLES 10
When applications are built using the Intel compiler on SUSE LINUX
Enterprise Server 10, you may see a warning similar to the following:
|ld: warning: libunwind.so.7, needed by
/usr/lib/gcc/ia64-suse-linux/4.1.0/../../..//libgcc_s.so, may conflict
with libunwind.so.6 |
A workaround is to add the following line to |icc.cfg|:
|-L /usr/lib |
This issue is expected to be resolved in a future release of the Intel
compiler.
Limited debug information with automatic CPU dispatching |(-ax*|)
Compilation using |-ax{W|N|B|P}| results in two copies of generated code
for each function. One for IA-32 generic code and one for CPU specific
code. The symbol for each function then refers to an Auto CPU Dispatch
routine that decides at run-time which one of the generated code
sections to execute. Debugger breakpoints that are set on these
functions by name cause the application to stop in the dispatch routine.
This may cause unexpected behavior when debugging. This issue may be
addressed in a future version of the Intel Debugger and Compilers.
Cannot debug or view traceback for IA-32 programs built without
|-fp |
Compilation using |-fp| specifies that the IA-32 EBP register be used as
a frame pointer rather than a general purpose register. Debuggers and
traceback handlers may not be able to properly unwind through a stack
that contains a call to a function that is compiled without |-fp| in
effect. If you compile with |-g| or |-O0|, |-fp| is implicitly enabled,
but not if you specify a higher optimization level explicitly (such as
|-O2|). If you intend to use the debugger or traceback on an
application, and are using some level of optimization higher than |-O0|,
you should also specify |-fp| to ensure that the debugger and traceback
handler can use frame pointers.
GNU assembler may not recognize |-xP| generated code
Older versions of the GNU Assembler may not be able to process assembly
code generated by compiling with the |-[a]xP| option. Use binutils
version 2.14.90.0.4.1 or later, or FSFbinutils 2.15 or later if this is
an issue for you.
Using older |gdb| versions with Intel Compilers
Intel compilers for Linux generate Dwarf2-format debugging information,
including several advanced features in Dwarf2 such as declarations
nested within classes. Older |gdb| debuggers, such as version 5.3.90-*,
are sometimes unable to correctly handle these Dwarf features. For best
success on source code which uses the full expressiveness of the C++
language, please consider using |gdb| version 6.1 or newer.
Use |idb| with Extended Debug Information
If you use the |-debug |keywords |inline_debug_info|,
|semantic_stepping|, |variable_locations| or |extended|, you should use
the Intel Debugger (idb), as other debuggers may not understand the
extended information and may behave unpredictably. We are working with
the developers of other debuggers towards their adding support for the
extended debug information.
Technical Support
Your feedback is very important to us. To receive technical support for
the tools provided in this product and for technical information
including FAQ's and product updates, please visit
http://www.intel.com/software/products/support .
*Note:* If your distributor provides technical support for this product,
please contact them for support rather than Intel.
For information about the Intel C++ Compiler's Users Forums, FAQ's, tips
and tricks, and other support information, please visit:
http://support.intel.com/support/performancetools/c/linux/
. For
general support information please visit
http://www.intel.com/software/products/support/
.
Submitting Issues
Steps to submit an issue:
1. Go to http://www.intel.com/software/products/support and click on
the link for Intel(R) Premier Support.
2. Log in to the site. Note that your username and password are
case-sensitive.
3. Click on the "|Go|" button next to the "|Product|" drop-down list.
4. Click on the "|Submit Issue|" link in the left navigation bar.
5. Choose "|Development Environment (tools,SDV,EAP)|" from the
"|Product Type|" drop-down list.
6. If this is a software or license-related issue, choose "|Intel(R)
C++ Compiler, Linux*|" from the "|Product Name|" drop-down list.
7. Enter your question and complete the fields in the windows that
follow to successfully submit the issue.
*Note:* Please notify your support representative prior to submitting
source code where access needs to be restricted to certain countries to
determine if this request can be accommodated.
Guidelines for problem report or product suggestion:
1. Describe your difficulty or suggestion.
For problem reports please be as specific as possible, so that we
may reproduce the problem. For compiler problem reports, please
include the compiler options and a small test case if possible.
2. Describe your system configuration information.
Get the version of glibc and kernel with following commands:
| > uname -a|
| > rpm -qa | grep glibc|
If you don't have |rpm| installed, use the command below:
| > ls /lib/libc*|
and copy the information into the corresponding Intel(R) Premier
Support fields.
Get the Intel C++ Compiler's Package ID with the following commands:
| > icc -V |
and copy the "Package ID" (e.g. |*l_cc_p_10.0.xxx*|) from the
output into the corresponding Intel(R) Premier Support field. Please
include any other specific information that may be relevant to
helping us to reproduce and address your concern.
3. If you were not able to install the compiler or cannot get the
Package ID, enter the filename you downloaded as the package ID.
Resolved Issues
Please review |_README| (e.g. |l_cc_p_10.0.xxx_README|),
available for download from Intel(R) Registration Center
Product Downloads, to see which
issues have been resolved in the latest version of the compiler.
Compiler Error Source Reducer (CESR)
Compiler Error Source Reducer (CESR) is a set of utilities which are
useful individually or collectively in gathering, reducing, pinpointing,
protecting, documenting, and bundling test cases comprised of C/C++ or
Fortran source code. It can be helpful if you have a large application
for which you want to extract a small test case for submission to Intel(R)
Premier Support. CESR can be downloaded from Intel(R) Registration Center
Product Downloads. Select your
product and in the version dropdown, select CESR. CESR is unsupported
and should be considered experimental, but we welcome your feedback on
it through Intel(R) Premier Support. CESR requires prior installation of
Python 2.2 or newer.
Documentation
You can view the Intel compiler and related HTML-based documentation
with your Web browser. You should use a Web browser that supports
JavaScript (such as Firefox*), so it can which provide full navigation,
search, index look-up, and hyperlink capabilities amongst the online
help files PDF versions of most manuals are available online at
http://developer.intel.com/software/products/compilers/clin/docs/manuals.htm
.
The documentation is installed in the |/doc| directory. An
HTML index document can be found at |/doc/Doc_Index.htm| .
/The Intel(R) Debugger Manual/ is provided in HTML form in the Intel(R)
Debugger doc directory.
For information on the GNU glibc C language library, documentation can
be obtained from the Linux OS vendor or from the GNU web site,
www.gnu.org .
Viewing Manpages
The |icc|(1) manpage provides a list of command-line options and related
information for the |icc| and |icpc| compiler commands. To display the
|icc|(1) manpage, type the following command after you set up your
environment by using a source command to execute the
|/bin/iccvars.*sh| file:
|$ man icc|
The |man| command provides single keys or key combinations that let you
scroll through the displayed content, search for a string, jump to a
location, and perform other functions. For example, type the | *z*| to
view the next screen or |*w*| to view the previous screen. To obtain
help about the man command, type the |*h*| key; when you are done
viewing help, type the |*q*| key to return to the displayed manpage. To
search, type |*/*| character followed by the search string (|*/string*|)
and press Enter. After viewing the man command text, type |*q*| to
return to the shell command prompt.
Viewing Documentation
The HTML documentation format has been tested to work with web browsers
shipped on supported Linux* distributions. PDF versions of the compiler
documentation are available at:
http://developer.intel.com/software/products/compilers/clin/docs/manuals.htm
Additional Information
Related Products and Services
Information on Intel software development products is available at
http://www.intel.com/software/products
.
Some of the related products include:
* The Intel(R) Software College
provides training for
developers on leading-edge software development technologies.
Training consists of online and instructor-led courses covering
all Intel architectures, platforms, tools, and technologies.
* The Intel(R) VTune(TM) Performance Analyzer
enables you to
evaluate how your application is utilizing the CPU and helps you
determine if there are modifications you can make to improve your
application's performance.
* The Intel(R) C++ and Fortran Compilers
are
an important part of making software run at top speeds with full
support for the latest Intel IA-32 and Itanium(R) processors.
* The Intel(R) Performance Library Suite
provides a set of routines optimized for various Intel processors.
The Intel(R) Math Kernel Library
, which
provides developers of scientific and engineering software with a
set of linear algebra, fast Fourier transforms and vector math
functions optimized for the latest Intel Pentium(R) and Intel
Itanium processors. The Intel(R) Integrated Performance Primitives
consists of
cross-platform tools to build high performance software for
several Intel architectures and several operating systems.
Disclaimer and Legal Information
INFORMATION IN THIS DOCUMENT IS PROVIDED IN CONNECTION WITH INTEL(R)
PRODUCTS. NO LICENSE, EXPRESS OR IMPLIED, BY ESTOPPEL OR OTHERWISE, TO
ANY INTELLECTUAL PROPERTY RIGHTS IS GRANTED BY THIS DOCUMENT. EXCEPT AS
PROVIDED IN INTEL'S TERMS AND CONDITIONS OF SALE FOR SUCH PRODUCTS,
INTEL ASSUMES NO LIABILITY WHATSOEVER, AND INTEL DISCLAIMS ANY EXPRESS
OR IMPLIED WARRANTY, RELATING TO SALE AND/OR USE OF INTEL PRODUCTS
INCLUDING LIABILITY OR WARRANTIES RELATING TO FITNESS FOR A PARTICULAR
PURPOSE, MERCHANTABILITY, OR INFRINGEMENT OF ANY PATENT, COPYRIGHT OR
OTHER INTELLECTUAL PROPERTY RIGHT. Intel products are not intended for
use in medical, life saving, life sustaining, critical control or safety
systems, or in nuclear facility applications.
Intel may make changes to specifications and product descriptions at any
time, without notice.
Developers must not rely on the absence or characteristics of any
features or instructions marked "reserved" or "undefined." Improper use
of reserved or undefined features or instructions may cause
unpredictable behavior or failure in developer?s software code when
running on an Intel processor. Intel reserves these features or
instructions for future definition and shall have no responsibility
whatsoever for conflicts or incompatibilities arising from their
unauthorized use.
The software described in this document may contain software defects
which may cause the product to deviate from published specifications.
Current characterized software defects are available on request.
This document as well as the software described in it is furnished under
license and may only be used or copied in accordance with the terms of
the license. The information in this document is furnished for
informational use only, is subject to change without notice, and should
not be construed as a commitment by Intel Corporation. Intel Corporation
assumes no responsibility or liability for any errors or inaccuracies
that may appear in this document or any software that may be provided in
association with this document. Except as permitted by such license, no
part of this document may be reproduced, stored in a retrieval system,
or transmitted in any form or by any means without the express written
consent of Intel Corporation.
BunnyPeople, Celeron, Celeron Inside, Centrino, Centrino logo, Core
Inside, FlashFile, i960, InstantIP, Intel, Intel logo, Intel386,
Intel486, Intel740, IntelDX2, IntelDX4, IntelSX2, Intel Core, Intel
Inside, Intel Inside logo, Intel. Leap ahead., Intel. Leap ahead. logo,
Intel NetBurst, Intel NetMerge, Intel NetStructure, Intel SingleDriver,
Intel SpeedStep, Intel StrataFlash, Intel Viiv, Intel vPro, Intel
XScale, IPLink, Itanium, Itanium Inside, MCS, MMX, Oplus, OverDrive,
PDCharm, Pentium, Pentium Inside, skoool, Sound Mark, The Journey
Inside, VTune, Xeon, and Xeon Inside are trademarks or registered
trademarks of Intel Corporation or its subsidiaries in the United States
and other countries.
* Other names and brands may be claimed as the property of others.
Copyright (C) 2007, Intel Corporation.