Error when building GEANT4 with VTK

Dear experts,

I am also facing an issue when trying to build with VTK:

In file included from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VtkPolydataPipeline.hh:30,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VtkPolydataPolylinePipeline.hh:29,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/src/G4VtkPolydataPolylinePipeline.cc:26:
/mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VVtkPipeline.hh:188:34: error: field ‘renderer’ has incomplete type ‘vtkSmartPointer<vtkRenderer>’
  188 |     vtkSmartPointer<vtkRenderer> renderer;
      |                                  ^~~~~~~~
In file included from /usr/include/vtk-9.1/vtkSystemIncludes.h:52,
                 from /usr/include/vtk-9.1/vtkDebugLeaksManager.h:29,
                 from /usr/include/vtk-9.1/vtkAutoInit.h:18,
                 from /usr/include/vtk-9.1/vtkRenderingCoreModule.h:50,
                 from /usr/include/vtk-9.1/vtkRenderer.h:35,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VVtkPipeline.hh:35,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VtkPolydataPipeline.hh:30,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VtkPolydataPolylinePipeline.hh:29,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/src/G4VtkPolydataPolylinePipeline.cc:26:
/usr/include/vtk-9.1/vtkOStreamWrapper.h:40:7: note: declaration of ‘class vtkSmartPointer<vtkRenderer>’
   40 | class vtkSmartPointer;
      |       ^~~~~~~~~~~~~~~
In file included from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VtkPolydataPipeline.hh:30,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VtkPolydataPolylinePipeline.hh:29,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/src/G4VtkPolydataPolylinePipeline.cc:26:
/mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VVtkPipeline.hh:130:62: error: could not convert ‘nullptr’ from ‘std::nullptr_t’ to ‘vtkSmartPointer<vtkRenderer>’
  130 |                    vtkSmartPointer<vtkRenderer> rendererIn = nullptr)
      |                                                              ^~~~~~~
      |                                                              |
      |                                                              std::nullptr_t
/mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VVtkPipeline.hh:130:49: error: ‘rendererIn’ has incomplete type
  130 |                    vtkSmartPointer<vtkRenderer> rendererIn = nullptr)
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/vtk-9.1/vtkSystemIncludes.h:52,
                 from /usr/include/vtk-9.1/vtkDebugLeaksManager.h:29,
                 from /usr/include/vtk-9.1/vtkAutoInit.h:18,
                 from /usr/include/vtk-9.1/vtkRenderingCoreModule.h:50,
                 from /usr/include/vtk-9.1/vtkRenderer.h:35,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VVtkPipeline.hh:35,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VtkPolydataPipeline.hh:30,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VtkPolydataPolylinePipeline.hh:29,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/src/G4VtkPolydataPolylinePipeline.cc:26:
/usr/include/vtk-9.1/vtkOStreamWrapper.h:40:7: note: declaration of ‘class vtkSmartPointer<vtkRenderer>’
   40 | class vtkSmartPointer;
      |       ^~~~~~~~~~~~~~~
In file included from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/src/G4VtkUtility.cc:29:
/mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VVtkPipeline.hh:188:34: error: field ‘renderer’ has incomplete type ‘vtkSmartPointer<vtkRenderer>’
  188 |     vtkSmartPointer<vtkRenderer> renderer;
      |                                  ^~~~~~~~
In file included from /usr/include/vtk-9.1/vtkSystemIncludes.h:52,
                 from /usr/include/vtk-9.1/vtkDebugLeaksManager.h:29,
                 from /usr/include/vtk-9.1/vtkAutoInit.h:18,
                 from /usr/include/vtk-9.1/vtkRenderingCoreModule.h:50,
                 from /usr/include/vtk-9.1/vtkRenderer.h:35,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VVtkPipeline.hh:35,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/src/G4VtkUtility.cc:29:
/usr/include/vtk-9.1/vtkOStreamWrapper.h:40:7: note: declaration of ‘class vtkSmartPointer<vtkRenderer>’
   40 | class vtkSmartPointer;
      |       ^~~~~~~~~~~~~~~
In file included from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/src/G4VtkUtility.cc:29:
/mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VVtkPipeline.hh:130:62: error: could not convert ‘nullptr’ from ‘std::nullptr_t’ to ‘vtkSmartPointer<vtkRenderer>’
  130 |                    vtkSmartPointer<vtkRenderer> rendererIn = nullptr)
      |                                                              ^~~~~~~
      |                                                              |
      |                                                              std::nullptr_t
/mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VVtkPipeline.hh:130:49: error: ‘rendererIn’ has incomplete type
  130 |                    vtkSmartPointer<vtkRenderer> rendererIn = nullptr)
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/vtk-9.1/vtkSystemIncludes.h:52,
                 from /usr/include/vtk-9.1/vtkDebugLeaksManager.h:29,
                 from /usr/include/vtk-9.1/vtkAutoInit.h:18,
                 from /usr/include/vtk-9.1/vtkRenderingCoreModule.h:50,
                 from /usr/include/vtk-9.1/vtkRenderer.h:35,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VVtkPipeline.hh:35,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/src/G4VtkUtility.cc:29:
/usr/include/vtk-9.1/vtkOStreamWrapper.h:40:7: note: declaration of ‘class vtkSmartPointer<vtkRenderer>’
   40 | class vtkSmartPointer;
      |       ^~~~~~~~~~~~~~~
In file included from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VtkPolydataPipeline.hh:30,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VtkPolydataInstancePipeline.hh:29,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/src/G4VtkPolydataInstancePipeline.cc:26:
/mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VVtkPipeline.hh:188:34: error: field ‘renderer’ has incomplete type ‘vtkSmartPointer<vtkRenderer>’
  188 |     vtkSmartPointer<vtkRenderer> renderer;
      |                                  ^~~~~~~~
In file included from /usr/include/vtk-9.1/vtkSystemIncludes.h:52,
                 from /usr/include/vtk-9.1/vtkDebugLeaksManager.h:29,
                 from /usr/include/vtk-9.1/vtkAutoInit.h:18,
                 from /usr/include/vtk-9.1/vtkRenderingCoreModule.h:50,
                 from /usr/include/vtk-9.1/vtkRenderer.h:35,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VVtkPipeline.hh:35,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VtkPolydataPipeline.hh:30,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VtkPolydataInstancePipeline.hh:29,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/src/G4VtkPolydataInstancePipeline.cc:26:
/usr/include/vtk-9.1/vtkOStreamWrapper.h:40:7: note: declaration of ‘class vtkSmartPointer<vtkRenderer>’
   40 | class vtkSmartPointer;
      |       ^~~~~~~~~~~~~~~
In file included from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VtkPolydataPipeline.hh:30,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VtkPolydataInstancePipeline.hh:29,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/src/G4VtkPolydataInstancePipeline.cc:26:
/mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VVtkPipeline.hh:130:62: error: could not convert ‘nullptr’ from ‘std::nullptr_t’ to ‘vtkSmartPointer<vtkRenderer>’
  130 |                    vtkSmartPointer<vtkRenderer> rendererIn = nullptr)
      |                                                              ^~~~~~~
      |                                                              |
      |                                                              std::nullptr_t
/mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VVtkPipeline.hh:130:49: error: ‘rendererIn’ has incomplete type
  130 |                    vtkSmartPointer<vtkRenderer> rendererIn = nullptr)
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/vtk-9.1/vtkSystemIncludes.h:52,
                 from /usr/include/vtk-9.1/vtkDebugLeaksManager.h:29,
                 from /usr/include/vtk-9.1/vtkAutoInit.h:18,
                 from /usr/include/vtk-9.1/vtkRenderingCoreModule.h:50,
                 from /usr/include/vtk-9.1/vtkRenderer.h:35,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VVtkPipeline.hh:35,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VtkPolydataPipeline.hh:30,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VtkPolydataInstancePipeline.hh:29,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/src/G4VtkPolydataInstancePipeline.cc:26:
/usr/include/vtk-9.1/vtkOStreamWrapper.h:40:7: note: declaration of ‘class vtkSmartPointer<vtkRenderer>’
   40 | class vtkSmartPointer;
      |       ^~~~~~~~~~~~~~~
make[2]: *** [source/CMakeFiles/G4visVtk.dir/build.make:328: source/CMakeFiles/G4visVtk.dir/visualization/Vtk/src/G4VtkPolydataPolylinePipeline.cc.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: *** [source/CMakeFiles/G4visVtk.dir/build.make:104: source/CMakeFiles/G4visVtk.dir/visualization/Vtk/src/G4VtkUtility.cc.o] Error 1
In file included from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/src/G4VtkUnstructuredGridPipeline.cc:48:
/mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VtkUnstructuredGridPipeline.hh:40:10: fatal error: vtkStaticCleanUnstructuredGrid.h: No such file or directory
   40 | #include "vtkStaticCleanUnstructuredGrid.h"
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [source/CMakeFiles/G4visVtk.dir/build.make:412: source/CMakeFiles/G4visVtk.dir/visualization/Vtk/src/G4VtkUnstructuredGridPipeline.cc.o] Error 1
In file included from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/src/G4VtkStore.cc:58:
/mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VtkUnstructuredGridPipeline.hh:40:10: fatal error: vtkStaticCleanUnstructuredGrid.h: No such file or directory
   40 | #include "vtkStaticCleanUnstructuredGrid.h"
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [source/CMakeFiles/G4visVtk.dir/build.make:188: source/CMakeFiles/G4visVtk.dir/visualization/Vtk/src/G4VtkStore.cc.o] Error 1
make[2]: *** [source/CMakeFiles/G4visVtk.dir/build.make:272: source/CMakeFiles/G4visVtk.dir/visualization/Vtk/src/G4VtkPolydataInstancePipeline.cc.o] Error 1
In file included from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VtkPolydataPipeline.hh:30,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VtkPolydataInstancePipeline.hh:29,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VtkPolydataInstanceTensorPipeline.hh:29,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/src/G4VtkPolydataInstanceTensorPipeline.cc:26:
/mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VVtkPipeline.hh:188:34: error: field ‘renderer’ has incomplete type ‘vtkSmartPointer<vtkRenderer>’
  188 |     vtkSmartPointer<vtkRenderer> renderer;
      |                                  ^~~~~~~~
In file included from /usr/include/vtk-9.1/vtkSystemIncludes.h:52,
                 from /usr/include/vtk-9.1/vtkDebugLeaksManager.h:29,
                 from /usr/include/vtk-9.1/vtkAutoInit.h:18,
                 from /usr/include/vtk-9.1/vtkRenderingCoreModule.h:50,
                 from /usr/include/vtk-9.1/vtkRenderer.h:35,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VVtkPipeline.hh:35,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VtkPolydataPipeline.hh:30,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VtkPolydataInstancePipeline.hh:29,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/include/private/G4VtkPolydataInstanceTensorPipeline.hh:29,
                 from /mnt/d/OneDrive/Libraries/GEANT4/geant4/source/visualization/Vtk/src/G4VtkPolydataInstanceTensorPipeline.cc:26:
/usr/include/vtk-9.1/vtkOStreamWrapper.h:40:7: note: declaration of ‘class vtkSmartPointer<vtkRenderer>’
   40 | class vtkSmartPointer;
      |       ^~~~~~~~~~~~~~~
[...]

I have no problem with CMAKE:

 sudo cmake -DCMAKE_INSTALL_PREFIX=../install/                                            
-DGEANT4_BUILD_MULTITHREADED=ON                                                
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_CXX_STANDARD=17                                                        
-DGEANT4_INSTALL_DATA=ON                                                       
-DGEANT4_INSTALL_DATASETS_TENDL=ON                                             
-DCMAKE_INSTALL_DATADIR=/mnt/d/OneDrive/Libraries/G4Data                       
-DGEANT4_USE_GDML=ON                                                           
-DGEANT4_USE_INVENTOR_QT=ON                                                    
-DGEANT4_USE_QT=ON                                                             
-DGEANT4_USE_VTK=ON                                                            
-DGEANT4_USE_RAYTRACER_X11=ON                                                  
-DGEANT4_USE_OPENGL_X11=ON                                                     
-DGEANT4_USE_SYSTEM_CLHEP=OFF
-DGEANT4_USE_SYSTEM_EXPAT=ON                                                   
-DGEANT4_USE_SYSTEM_ZLIB=OFF                                                   /mnt/d/OneDrive/Libraries/GEANT4/geant4
-- Checking C++ feature CXXSTDLIB_FILESYSTEM_NATIVE - Success
-- Found OpenGL: /usr/lib/x86_64-linux-gnu/libOpenGL.so  found components: OpenGL GLX
-- Found OpenGL: /usr/lib/x86_64-linux-gnu/libOpenGL.so
-- Reusing dataset G4NDL (4.7)
-- Reusing dataset G4EMLOW (8.5)
-- Reusing dataset PhotonEvaporation (5.7)
-- Reusing dataset RadioactiveDecay (5.6)
-- Reusing dataset G4PARTICLEXS (4.0)
-- Reusing dataset G4PII (1.3)
-- Reusing dataset RealSurface (2.2)
-- Reusing dataset G4SAIDDATA (2.0)
-- Reusing dataset G4ABLA (3.3)
-- Reusing dataset G4INCL (1.2)
-- Reusing dataset G4ENSDFSTATE (2.3)
-- Reusing dataset G4TENDL (1.4)
-- The following Geant4 features are enabled:
CMAKE_CXX_STANDARD: Compiling against C++ Standard '17'
GEANT4_BUILD_MULTITHREADED: Build multithread enabled libraries
GEANT4_BUILD_TLS_MODEL: Building with TLS model 'initial-exec'
GEANT4_USE_SYSTEM_EXPAT: Using system EXPAT library
GEANT4_USE_GDML: Building Geant4 with GDML support
GEANT4_USE_INVENTOR_QT: Build OpenInventor Qt Driver
GEANT4_USE_VTK: Using VTK for visualisation
GEANT4_USE_OPENGL_X11: Build Geant4 OpenGL driver with X11 support
GEANT4_USE_RAYTRACER_X11: Build RayTracer driver with X11 support
GEANT4_USE_QT: Build Geant4 with Qt5 support
GEANT4_USE_QT3D: Build Geant4 Qt3D driver

– Configuring done
– Generating done
– Build files have been written to: /usr/local/geant4/build
Am I missing something ?
I try to compile G4.11.2.1 with vtk9.1:

libvtk9-dev is already the newest version (9.1.0+really9.1.0+dfsg2-3build1).
libvtk9-java is already the newest version (9.1.0+really9.1.0+dfsg2-3build1).
libvtk9-qt-dev is already the newest version (9.1.0+really9.1.0+dfsg2-3build1).
libvtk9.1 is already the newest version (9.1.0+really9.1.0+dfsg2-3build1).
libvtk9.1-qt is already the newest version (9.1.0+really9.1.0+dfsg2-3build1).
python3-vtk9 is already the newest version (9.1.0+really9.1.0+dfsg2-3build1).
vtk9 is already the newest version (9.1.0+really9.1.0+dfsg2-3build1).
vtk9-doc is already the newest version (9.1.0+really9.1.0+dfsg2-3build1).
vtk9-examples is already the newest version (9.1.0+really9.1.0+dfsg2-3build1).

Thanks @froz1233, could you also let us know what OS, compiler and CMake version this is with please?

@sboogert, could you take a look at this please?

Thank you.
I am using Ubuntu 22.04.4 LTS with WSL 1 on windows 11.
The compiler is gcc version 11.4.0 and cmake version 3.22.1.

1 Like

Ok I am trying a build in a system which approximately matches yours. Can you check

/usr/include/vtk-9.1/ and see if vtkSmartPointer.h is there.

Ok I can reproduce this problem. It requires a few relatively few relatively changes. I will prepare an update for geant4. If you want to get working with VTK quickly

  1. put in #include "vtkSmartPointer.h" into G4VVtkPipeline.hh
  2. Comment out or remove #include "vtkStaticCleanUnstructuredGrid.h" on line 40 in G4VtkUnstructuredGridPipeline.hh and vtkSmartPointer<vtkStaticCleanUnstructuredGrid> clean; on line 175

The test environment is probably a different compiler and more upto date VTK.

Perfect, thank you.
In addition to your steps 1. and 2., it was also necessary to #include "vtkUnstructuredGridAlgorithm.h" in G4VtkUnstructuredGridPipeline.hh

Ok I was too fast :slight_smile:
As soon as I compile with USE_VTK ON, the following openGL drivers are not available anymore:

  OpenGLImmediateQt (OGLIQt, OGLI)
  OpenGLStoredQt (OGLSQt, OGL, OGLS)
  OpenGLImmediateX (OGLIX, OGLIQt_FALLBACK)
  OpenGLStoredX (OGLSX, OGLSQt_FALLBACK)

If I compile with USE_VTK OFF, the openGL drivers become available but obviously, VTK is not available anymore.
Is it impossible to compile with both openGL and VTK ?

I have found the following warning in the installation guide:
**WARNING:** Use of Qt6 in Geant4 is currently in beta and full functionality is not guaranteed. If you enable this option and also build the VTK and SoQt drivers, those dependencies must have been built and linked against Qt6 as well. If you have both Qt5 and Qt6 installed on your system, you may need to be careful of header path ordering.

I have both QT5 and QT6 on my system but I believe I compile with QT5 only. What means that I should be careful of header path ordering ?

I found this in the release notes:

Is this temporary and is there a way to force driver registration ?

OpenGL and VTK together

This is not possible. There is a relatively deep incompatibility between OpenGL (the Geant4 OpenGL driver, of course not the OpenGL standard or library) and VTK which we could not resolve prior to the 11.2 release. VTK is fully featured and you should be able to run routinely with just VTK as your visualiser. Almost all functionality of other drivers is represented in VTK, including off screen rendering and 2D and 3D export.

Thank you. All is clear for me now

This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.