Error in <TClass::LoadClassInfo>: no interpreter information for class (Windows only)

Dear experts,

I am currently working on a version of the ALICE MasterClass which was created last year, available here:

I almost got it working on Windows, however there are some issues that I have problems with figuring out the cause:

In file included from 
libStrangeness dictionary payload:5:
In file included from D:/Masterclass/masterclass-continued/src/Strangeness/part1/Part1.h:27:
\Masterclass\masterclass-continued\out\install\x64-Release\\headers\Strangeness/GUITranslation.h:71:3: error: 'const' 
qualifier may not be applied to a reference
  LANG_KEY(Yield)
  ^
\Masterclass\masterclass-continued\out\install\x64-Release\\headers\Utility/LanguageProvider.h:96:28: note: expanded 
from macro 'LANG_KEY'

  const TString& KeyName() const { return GetText(STR(KeyName)); }

                           ^
In file included from libStrangeness dictionary payload:5:
In file included from D:/Masterclass/masterclass-continued/src/Strangeness/part1/Part1.h:27:
\Masterclass\masterclass-continued\out\install\x64-Release\\headers\Strangeness/GUITranslation.h:71:3: error: 
expected member name or ';' after declaration specifiers

  LANG_KEY(Yield)

  ^~~~~~~~~~~~~~~


\Masterclass\masterclass-continued\out\install\x64-Release\\headers\Utility/LanguageProvider.h
:96:34: note: 
expanded from macro 'LANG_KEY'

  const TString& KeyName() const { return GetText(STR(KeyName)); }

  ~~~~~~~~~~~~~                  ^

In file included from 
libStrangeness dictionary payload:7:
D:/Masterclass/masterclass-continued/src/Strangeness/part1/EventDisplay.h:137:70: error: no member named 
'FileEventDisplay' in 'Strangeness::TGUIEnglish'
  const TString& Instructions() const override { return fTranslation.FileEventDisplay(); }
                                                        ~~~~~~~~~~~~ ^

In file included from 
libStrangeness dictionary payload:12:
D:/Masterclass/masterclass-continued/src/Strangeness/part2/Exercise.h:100:70: error: no member named 
'FileEventDisplay' in 'Strangeness::TGUIEnglish'
  const TString& Instructions() const override { return fTranslation.FileEventDisplay(); }
                                                        ~~~~~~~~~~~~ ^

and a bunch of errors about missing slots, e.g.:

Error in <TClass::LoadClassInfo>: no interpreter information for class Strangeness::TNavigation is available even 
though it has a TClass initialization routine.
Error in <TQObject::CheckConnectArgs>: slot Strangeness::TNavigation::PatternInfo() does not exist

which (obviously) make some parts of the GUI non-functional.

I am using the “ninja” build system integrated into Visual Studio IDE. I am doing a Release build with msvc_x86 compiler. I am using ROOT which was installed from the official installer. I am using the -DROOTSYS=C:\root_v6.18.04 variable in CMake configuration. I do the “install” build and then run the MasterClass from the out/install directory using the script.

Could you help me?

P.S. I believe ROOT 6.18.04 has a bug (https://sft.its.cern.ch/jira/browse/ROOT-10369) which affects MasterClass right now. I can offer libEve.dll which has this problem patched (https://cernbox.cern.ch/index.php/s/cYpggKGsBw0sD8U).

P.S2. My start.bat script assumes ROOT is installed in “C:\root_v6.18.04”, if you have it installed somewhere else you need to edit it.

Hi Piotr,

FYI, I’m looking into this. I’ll keep you updated

Cheers, Bertrand

I’ll fix the issue #ROOT-10369. (BTW, how did you fix it on your side?)
In the meanwhile, could you post a minimal reproducer for the errors you see?

I had to modify tour CMakeLists.txt, but then, here is what I get when trying to build your masterclass-continued project:

C:\Users\bellenot\gitlab\build>cmake -A Win32 -DCMAKE_VERBOSE_MAKEFILE=ON -DROOTSYS=C:\Users\bellenot\bin\root\master\debug ..\masterclass-continued
-- Building for: Visual Studio 16 2019
-- The CXX compiler identification is MSVC 19.23.28106.4
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.23.28105/bin/Hostx64/x86/cl.exe
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.23.28105/bin/Hostx64/x86/cl.exe -- 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
-- Build files have been written to: C:/Users/bellenot/gitlab/build

C:\Users\bellenot\gitlab\build>cmake --build . --config Debug
Microsoft (R) Build Engine version 16.3.2+e481bbf88 for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.

Build started 23/10/2019 15:56:43.
Project "C:\Users\bellenot\gitlab\build\ALL_BUILD.vcxproj" on node 1 (default targets).
Project "C:\Users\bellenot\gitlab\build\ALL_BUILD.vcxproj" (1) is building "C:\Users\bellenot\gitlab\build\ZERO_CHECK.v
cxproj" (2) on node 1 (default targets).
PrepareForBuild:
  Creating directory "Win32\Debug\ZERO_CHECK\".
  Creating directory "C:\Users\bellenot\gitlab\build\Debug\".
  Creating directory "Win32\Debug\ZERO_CHECK\ZERO_CHECK.tlog\".
InitializeBuildStatus:
  Creating "Win32\Debug\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
CustomBuild:
  Checking Build System
  CMake does not need to re-run because C:/Users/bellenot/gitlab/build/CMakeFiles/generate.stamp is up-to-date.
  CMake does not need to re-run because C:/Users/bellenot/gitlab/build/src/CMakeFiles/generate.stamp is up-to-date.
  CMake does not need to re-run because C:/Users/bellenot/gitlab/build/src/EntryPoint/CMakeFiles/generate.stamp is up-t
  o-date.
  CMake does not need to re-run because C:/Users/bellenot/gitlab/build/src/Utility/CMakeFiles/generate.stamp is up-to-d
  ate.
  CMake does not need to re-run because C:/Users/bellenot/gitlab/build/src/Strangeness/CMakeFiles/generate.stamp is up-
  to-date.
  CMake does not need to re-run because C:/Users/bellenot/gitlab/build/src/Raa/CMakeFiles/generate.stamp is up-to-date.
  CMake does not need to re-run because C:/Users/bellenot/gitlab/build/src/Jpsi/CMakeFiles/generate.stamp is up-to-date
  .
FinalizeBuildStatus:
  Deleting file "Win32\Debug\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild".
  Touching "Win32\Debug\ZERO_CHECK\ZERO_CHECK.tlog\ZERO_CHECK.lastbuildstate".
Done Building Project "C:\Users\bellenot\gitlab\build\ZERO_CHECK.vcxproj" (default targets).

Project "C:\Users\bellenot\gitlab\build\ALL_BUILD.vcxproj" (1) is building "C:\Users\bellenot\gitlab\build\src\EntryPoi
nt\EntryPoint.vcxproj" (3) on node 1 (default targets).
Project "C:\Users\bellenot\gitlab\build\src\EntryPoint\EntryPoint.vcxproj" (3) is building "C:\Users\bellenot\gitlab\bu
ild\src\Jpsi\Jpsi.vcxproj" (4) on node 1 (default targets).
Project "C:\Users\bellenot\gitlab\build\src\Jpsi\Jpsi.vcxproj" (4) is building "C:\Users\bellenot\gitlab\build\src\Util
ity\Utility.vcxproj" (5) on node 1 (default targets).
PrepareForBuild:
  Creating directory "C:\Users\bellenot\gitlab\build\src\Utility\Debug\".
  Creating directory "Utility.dir\Debug\Utility.tlog\".
InitializeBuildStatus:
  Creating "Utility.dir\Debug\Utility.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
CustomBuild:
  Generating G__Utility.cxx, libUtility_rdict.pcm, libUtility.rootmap
  In file included from input_line_11:6:
  In file included from C:/Users/bellenot/gitlab/masterclass-continued/src/Utility/EventDisplay.h:16:
  In file included from C:/Users/bellenot/gitlab/masterclass-continued/src\Utility/Exercise.h:16:
  C:/Users/bellenot/gitlab/masterclass-continued/src/Utility/VSDReader.h:41:10: fatal error: 'gsl/gsl' file not found
  #include <gsl/gsl>
           ^~~~~~~~~
CUSTOMBUILD : error : C:/Users/bellenot/bin/root/master/debug/bin/rootcling.exe: compilation failure (C:/Users/bellenot
/gitlab/build/src/Utility/libUtilityb4d4a8d4f0_dictUmbrella.h) [C:\Users\bellenot\gitlab\build\src\Utility\Utility.vcxp
roj]
Done Building Project "C:\Users\bellenot\gitlab\build\src\Utility\Utility.vcxproj" (default targets) -- FAILED.

Done Building Project "C:\Users\bellenot\gitlab\build\src\Jpsi\Jpsi.vcxproj" (default targets) -- FAILED.

Done Building Project "C:\Users\bellenot\gitlab\build\src\EntryPoint\EntryPoint.vcxproj" (default targets) -- FAILED.

Done Building Project "C:\Users\bellenot\gitlab\build\ALL_BUILD.vcxproj" (default targets) -- FAILED.


Build FAILED.

"C:\Users\bellenot\gitlab\build\ALL_BUILD.vcxproj" (default target) (1) ->
"C:\Users\bellenot\gitlab\build\src\EntryPoint\EntryPoint.vcxproj" (default target) (3) ->
"C:\Users\bellenot\gitlab\build\src\Jpsi\Jpsi.vcxproj" (default target) (4) ->
"C:\Users\bellenot\gitlab\build\src\Utility\Utility.vcxproj" (default target) (5) ->
(CustomBuild target) ->
  CUSTOMBUILD : error : C:/Users/bellenot/bin/root/master/debug/bin/rootcling.exe: compilation failure (C:/Users/bellenot/gitlab/build/src/Utility/libUtilityb4d4a8d4f0_dictUmbrella.h) [C:\Users\bellenot\gitlab\build\src\Utility\Utility.vc
xproj]

    0 Warning(s)
    1 Error(s)

Time Elapsed 00:00:10.05

Before I spend more time trying to fix all the errors in your project, can you tell me what are the pre-requisites and how to generate a minimal reproducer?
N.B. Ninja builds on Windows have not been tested. I only use Visual Studio via the command line.
Thanks.

fatal error: ‘gsl/gsl’ file not found

I guess I forgot to mention that you have to do

git submodule init
git submodule update

on the project, I’m sorry for that.

how to generate a minimal reproducer ?

I’ll do that as soon as I can. In the meantime, could you try it once more with the submodules initialized?

On the other hand, from my tests is seems that the runtime header parser doesn’t like the word Yield being used. When I replaced it with something else, e.g. KeyYield the error disappeared.

OK, thanks. I’ll try again and keep you updated

Here is what I got when calling the start.bat script:

C:\Users\bellenot\gitlab\build>Debug\start
Warning in <TClassTable::Add>: class ROOT::Detail::TTypedIter<class TEnumConstant> already in TClassTable
input_line_15:1:3: error: source file is not valid UTF-8
pA<C7><U+000B>
  ^
input_line_15:1:1: error: unknown type name 'pA'
pA<C7><U+000B>
^
<<< cling interactive line includer >>>:1:1: error: expected unqualified-id

C:\Users\bellenot\gitlab\build>

BTW, LD_LIBRARY_PATH is useless on Windows…

OK, my bad, I built it in Debug mode… So in Release mode the build is successful. What do I have to run to see the problem?

In my tests, this error happened when ROOT was unable to load the rdict files due to them not being present in the same directory as dll.

From the main menu select Strange Particles, Excerise 1, confirm, then any of the datasets (doesn’t matter), confirm. When the final window opens, there you should see the errors (in the console window).

FYI I have pushed the change from Yield to KeyYield yesterday, so if you did an update of the repository since then you won’t see this particular error.

BTW, LD_LIBRARY_PATH is useless on Windows…

I was not sure if ROOT was smart enough to look for the rdicts in WIndows’ PATH instead of LD_LIBRARY_PATH.

OK, thanks. I’ll try to run/debug this tomorrow

LD_LIBRARY_PATH has no meaning on Windows. everything is (should be) in the PATH

I can confirm however that the Debug build doesn’t seem to work (I have replaced my ROOT installation with the “debug” version for this).

OK, I don’t see any message about Signal/Slots, but I got a crash (with ROOT master)…

Today it works… And FYI, I had to modify your CMakeLists.txt to make it work with ROOT master:

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5d8bcbc..037294a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -54,12 +54,18 @@ set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)

 if (MSVC)
     set(ROOTDICT_DESTINATION bin)
+    #---Select compiler flags----------------------------------------------------------------
+    set(CMAKE_CXX_FLAGS "-nologo -Zc:__cplusplus -MD -W3 -GR -wd4244 -D_WIN32")
+    set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -Z7")
+    set(CMAKE_CXX_FLAGS_RELEASE        "-O2")
+    set(CMAKE_CXX_FLAGS_DEBUG          "-Od -Z7")
 else()
     set(ROOTDICT_DESTINATION lib)
 endif()

 # ROOT dictionaries and maps
-include("${ROOT_DIR}/modules/RootNewMacros.cmake")
+include("${ROOT_DIR}/RootMacros.cmake")
+include_directories("${ROOT_DIR}/include")

 include_directories("${CMAKE_SOURCE_DIR}/src")
 include_directories("${CMAKE_SOURCE_DIR}/translation")