Message: Re: C++11 standard not being used Geant4-10.01.p02 Not Logged In (login)
 Next-in-Thread Next-in-Thread
 Next-in-Forum Next-in-Forum

Note Re: C++11 standard not being used Geant4-10.01.p02 

Forum: Installation and Configuration
Re: Question C++11 standard not being used Geant4-10.01.p02 (Marcus O'Flaherty)
Date: 29 Feb, 2016
From: Ben Morgan <Ben Morgan>

On Thu, 25 Feb 2016 12:02:15 GMT, Marcus O'Flaherty wrote:
> I am trying to migrate my application from Geant4-9.04 to
> Geant4-10.01.p02, so need to move from using GNUmake to CMake.
> I am using the g++4.9 compiler, and have downloaded and built ROOT
> 6.04.14 with the -Dcxx11=ON flag (I believe it is set by default
> anyway).
> I've then run CMake to generate build scripts for my application with
> the option -DGEANT4_BUILD_CXXSTD=11. Again, I believe geant4-10.01.p02
> sets this by default, but this time I receive a message saying that
> manually specified variables were not used:
> 
> cmake
> -DGeant4_DIR=/home/marc/LinuxSystemFiles/GEANT4/geant4-10.01.p02/install/lib/Geant4-10.1.2/
> -DCMAKE_INSTALL_PREFIX=/usr -DGEANT4_BUILD_CXXSTD=11 ../WChSandBox_v1
> -- The C compiler identification is GNU 4.9.2
> -- The CXX compiler identification is GNU 4.9.2
> -- Check for working C compiler: /usr/bin/cc
> -- Check for working C compiler: /usr/bin/cc -- works
> -- Detecting C compiler ABI info
> -- Detecting C compiler ABI info - done
> -- Detecting C compile features
> -- Detecting C compile features - done
> -- Check for working CXX compiler: /usr/bin/c++
> -- Check for working CXX compiler: /usr/bin/c++ -- works
> -- Detecting CXX compiler ABI info
> -- Detecting CXX compiler ABI info - done
> -- Detecting CXX compile features
> -- Detecting CXX compile features - done
> -- Configuring done
> -- Generating done
> CMake Warning:
> Manually-specified variables were not used by the project:
> 
> GEANT4_BUILD_CXXSTD
> 
> 
> -- Build files have been written to:
> /home/marc/LinuxSystemFiles/WChSandBox/build
> 
> My CMakeCache.txt file nonetheless contains the line:
> GEANT4_BUILD_CXXSTD:UNINITIALIZED=11
> which seems to suggest that even though my manual specifcation has been
> ignored, it still uses this option as an uninitialised default.
> But still, when I run 'make' I receive error messages suggesting C++11
> is not being specified:
> 
> In file included from /usr/include/c++/4.9/atomic:38:0,
> from /usr/local/include/Rtypes.h:37,
> from /usr/local/include/TObject.h:31,
> from /usr/local/include/TNamed.h:26,
> from /usr/local/include/TBranch.h:28,
> from /usr/local/include/TTree.h:30,
> from
> /home/marc/LinuxSystemFiles/WChSandBox/WChSandBox_v1/include/WCLitePrimaryGeneratorAction.hh:7,
> from
> /home/marc/LinuxSystemFiles/WChSandBox/WChSandBox_v1/WChSandBox.cc:54:
> /usr/include/c++/4.9/bits/c++0x_warning.h:32:2: error: #error This file
> requires compiler and library support for the ISO C++ 2011 standard.
> This support is currently experimental, and must be enabled with the
> -std=c++11 or -std=gnu++11 compiler options.
> 
> I have searched HyperNews and only found one thread documenting a
> similar issue with 10.01 .p01 , but the issue should be fixed in the
> next patch - which I have.
> Does this look like a Geant issue? A ROOT issues? Can anyone suggest any
> measures/checks? Is this fix really in patch 02?

The GEANT4_BUILD_CXXSTD flag is only relevant when building Geant4 itself and has no effect when building client applications.

To build a client application against the same standard used to build Geant4 (in 10.1 and below), the UseGeant4.cmake file can be used as described in the Application Developer's Guide. Inclusion of that file will set the CMAKE_CXX_FLAGS to the same set used to build the install of Geant4.

If you need to validate that the install found was compiled against C++11, the Geant4Config.cmake will also set a variable named Geant4_CXXSTD to the standard used, e.g. "c++11", that can be queried in a CMake script.

If your application can be upgraded to support Geant4 10.2 and CMake 3.2 or higher, then you can use CMake's compile features to handle all of this automatically. Simply linking to the Geant4 libraries in this case will apply the correct flags for the standard in question.

Inline Depth:
 1 1
 All All
Outline Depth:
 1 1
 2 2
 All All
Add message: (add)

1 Ok: Re: C++11 standard not being used Geant4-10.01.p02   (Marcus O'Flaherty - 29 Feb, 2016)
 Add Message Add Message
to: "Re: C++11 standard not being used Geant4-10.01.p02"

 Subscribe Subscribe

This site runs SLAC HyperNews version 1.11-slac-98, derived from the original HyperNews


[ Geant 4 Home | Geant 4 HyperNews | Search | Request New Forum | Feedback ]