Migrating to the gcc 4.6 compiler
Accessing the compiler
gcc4.6 is not installed by default in either slc5 or slc6. To use it for regular Gaudi/LHCb builds it is enough to set the environment variable CMTCONFIG accordingly:
LbLogin -c x86_64-slc5-gcc46-opt |
To be able to use it on the command line outside the Gaudi/LHCb builds, you can do the following (bash):
# export CMTCONFIG=x86_64-slc5-gcc46-opt
# SetupProject LCGCMT gcc
|
(use
setenv
on tcsh)
Accessing gcc46 builds
gcc46 builds are part of the official LHCb software distribution for all projects released since January 2012
Common compilation errors
The most common problems are described on the
gcc 4.6 migration guide
(it may be useful to have a look to the
gcc 4.4 one
too).
Below are hints on solving other common errors or warnings.
Errors
Warnings
warning: operation on ‘...’ may be undefined [-Wsequence-point]
Comes from code like:
The problem is that the assignment to
a
appears twice and the standard does not define what the behavior should be. The code should be modified to remove the duplicated assignment:
or, better
Differences in application output between gcc43 and gcc46
The most common cause of differences when comparing the output of an application build with gcc46 with the gcc43 equivalent are due to differences in sorting. In most cases, the differences have been fixed by replacing occurrences of
std::sort
with
std::stable_sort
--
MarcoClemencic - 23-Nov-2011