Please read tips for efficient and successful posting and posting code
ROOT Version: Not Provided
Platform: Not Provided
Compiler: Not Provided
Hi there
I’m writing code by changing B1 example, and I’m trying to include Root header to the Geant4, for example, to the B1EventAction. I only put the #include “TFile.h” into the B1EventAction. However, when I change CMakelist, I find there is no FindROOT.cmake in Modules, so I copy the whole folder from otherelse to my computer. Here is my CMakelist
#----------------------------------------------------------------------------
Setup the project
cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
project(B1)
#----------------------------------------------------------------------------
Find Geant4 package, activating all available UI and Vis drivers by default
You can set WITH_GEANT4_UIVIS to OFF via the command line or ccmake/cmake-gui
to build a batch mode only executable
option(WITH_GEANT4_UIVIS “Build example with Geant4 UI and Vis drivers” ON)
if(WITH_GEANT4_UIVIS)
find_package(Geant4 REQUIRED ui_all vis_all)
else()
find_package(Geant4 REQUIRED)
endif()
set(CMAKE_MODULE_PATH /usr/local/Cellar/geant4/10.5.1/lib/Geant4-10.5.1/Modules/)
find_package(ROOT REQUIRED)
include_directories(${ROOTSYS}/include)
#----------------------------------------------------------------------------
Setup Geant4 include directories and compile definitions
Setup include directory for this project
include({Geant4_USE_FILE})
include_directories({PROJECT_SOURCE_DIR}/include
{PROJECT_SOURCE_DIR}/shared/include
{Geant4_INCLUDE_DIR}
${ROOT_INCLUDE_DIRS})
#----------------------------------------------------------------------------
Locate sources and headers for this project
NB: headers are included so they will show up in IDEs
file(GLOB sources {PROJECT_SOURCE_DIR}/src/*.cc
{PROJECT_SOURCE_DIR}/shared/src/.cc)
file(GLOB headers {PROJECT_SOURCE_DIR}/include/*.hh
{PROJECT_SOURCE_DIR}/shared/include/.hh)
#----------------------------------------------------------------------------
Add the executable, and link it to the Geant4 libraries
add_executable(exampleB1 exampleB1.cc {sources} {headers})
target_link_libraries(exampleB1 ${Geant4_LIBRARIES})
#----------------------------------------------------------------------------
Copy all scripts to the build directory, i.e. the directory in which we
build B1. This is so that we can run the executable directly because it
relies on these scripts being in the current working directory.
set(EXAMPLEB1_SCRIPTS
exampleB1.in
exampleB1.out
init_vis.mac
run1.mac
run2.mac
vis.mac
)
foreach(_script {EXAMPLEB1_SCRIPTS})
configure_file(
{PROJECT_SOURCE_DIR}/{_script}
{PROJECT_BINARY_DIR}/${_script}
COPYONLY
)
endforeach()
#----------------------------------------------------------------------------
For internal Geant4 use - but has no effect if you build this
example standalone
add_custom_target(B1 DEPENDS exampleB1)
#----------------------------------------------------------------------------
Install the executable to ‘bin’ directory under CMAKE_INSTALL_PREFIX
install(TARGETS exampleB1 DESTINATION bin)
There is no error and warning when I type cmake, I did make sure that cmake is able to find the ROOTSYS. But when I type make, there are lots of warnings about TString and CLHEP, and here is error
[ 75%] Building CXX object CMakeFiles/exampleB1.dir/src/B1RunAction.cc.o
[ 87%] Building CXX object CMakeFiles/exampleB1.dir/src/B1SteppingAction.cc.o
[100%] Linking CXX executable exampleB1
Undefined symbols for architecture x86_64:
“TVersionCheck::TVersionCheck(int)”, referenced from:
___cxx_global_var_init.5 in B1EventAction.cc.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [exampleB1] Error 1
make[1]: *** [CMakeFiles/exampleB1.dir/all] Error 2
make: *** [all] Error 2
Now I have no idea about this problem. Could you please tell me what should I do to solve that? Thanks for your help.
ROOT version: v6.20.00
Geant4 version: 10.5.1
OS: MacOS 10.15.4