Using experimental features in VS Code

I am trying to use the experimental RNTuple feature. It seems to work when I use a ROOT interactive session, but RNTuple libraries don’t seem to be found by my C++ project in VS Code, despite other ROOT libraries being found and working properly. I get many linking errors such as

build] /usr/bin/ld: libQwAnalysis.so: undefined reference to `ROOT::Experimental::RNTupleWriter::~RNTupleWriter()’

[build] /usr/bin/ld: libQwAnalysis.so: undefined reference to `vtable for ROOT::Experimental::RSimpleField’

[build] /usr/bin/ld: libQwAnalysis.so: undefined reference to `vtable for ROOT::Experimental::RFieldBase’

[build] /usr/bin/ld: libQwAnalysis.so: undefined reference to `ROOT::Experimental::Internal::GenerateColumnElement(std::type_index, ROOT::Experimental::EColumnType)’

[build] /usr/bin/ld: libQwAnalysis.so: undefined reference to `ROOT::Experimental::RFieldBase::BindValue(std::shared_ptr)’

[build] /usr/bin/ld: libQwAnalysis.so: undefined reference to `ROOT::Experimental::RFieldBase::AcceptVisitor(ROOT::Experimental::Detail::RFieldVisitor&) const’

[build] /usr/bin/ld: libQwAnalysis.so: undefined reference to `ROOT::Experimental::RNTupleModel::Create()’

[build] /usr/bin/ld: libQwAnalysis.so: undefined reference to `vtable for ROOT::Experimental::RFieldZero’

[build] /usr/bin/ld: libQwAnalysis.so: undefined reference to `ROOT::Experimental::RSimpleField::ConstructValue(void*) const’

[build] /usr/bin/ld: libQwAnalysis.so: undefined reference to `ROOT::Experimental::RFieldBase::AppendImpl(void const*)’

Here is the relevant part of my my cmakelists file:
set(minimum_root_version 6.22)

find_package(ROOT ${minimum_root_version} REQUIRED New Gui)

config_add_dependency(ROOT ${minimum_root_version})

I am trying to include the libraries as
#include “TH1.h”

#include “ROOT/RNTuple.hxx”

#include “ROOT/RNTupleModel.hxx”

#include “ROOT/RNTupleWriter.hxx”

ROOT version: 6.34.04
Platform: Ubuntu 24.04.2 LTS,
VS Code Version: 1.99.3

Any help would be appreciated.

I guess @jblomer can help you.

Hello @multivac,
in order to link to the RNTuple library you need to explicitly add -lROOTNTuple to your command line when compiling.
So in your CMakeLists.txt you can add:

find_package(ROOT ${minimum_root_version} REQUIRED New Gui ROOTNTuple)
# ...
target_link_libraries(<your project> PRIVATE ROOT::ROOTNTuple)
1 Like