How can I link ROOT libraries in Makefile for VSCode in Windows 11?

97 Views Asked by At

I am a newbie when it comes to VSCode and especially working with ROOT. I have a C++ project with a Makefile that uses ROOT libraries. The Makefile was created for Linux and I tried to adapt it for my Windows, but it seems not to work.

This is the Makefile:

$(info $(SHELL))
OBJECTS = Nucleus.o Mass.o Chart.o Yrast.o TlArray.o  LevelDensity.o Angle.o Nuclide.o LightP.o Evap.o AngleDist.o Random.o TlBarDist.o Scission.o  Weight.o   SigCharged.o SigBarDist.o Fus.o Run.o

ROOT_LIB_DIR = "C:\root_v6.28.06\lib"
export LIBPATH := $(ROOT_LIB_DIR)
ALLOBJECTS := $(patsubst %.cpp,%.o,$(wildcard *.cpp))
FOBJECTS:=$(patsubst %.f,%.o,$(wildcard *.f))
LIBS = -L$(LIBPATH) -lCore -lImt -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad -lROOTVecOps -lTree -lTreePlayer -lRint -lPostscript -lMatrix -lPhysics -lMathCore -lThread -lGui
CFLAGS=  -c -g -Wall  -I"C:\root_v6.28.06\include" $(LIBS)
COMPILER= g++

testDecay:  testDecay.o $(OBJECTS)
    $(COMPILER) -o testDecay testDecay.o $(OBJECTS)  

main: main.o $(OBJECTS)
    $(COMPILER) -o main main.o $(OBJECTS) $(LIBS)

testGemini:: testGemini.o gemini.o $(OBJECTS)
    f77 -o testGemini testGemini.o gemini.o $(OBJECTS) -lstdc++

gemini.a: $(OBJECTS)
    ar rcs gemini.a $(OBJECTS)
    ranlib gemini.a

$(ALLOBJECTS): %.o : %.cpp
    $(COMPILER) $(CFLAGS) $< -o $@

$(FOBJECTS): %.o : %.f
    f77 $(CFLAGS) $< -o $@


clean:
    del *.o


From the error that I receive, I assume that the order of the libraries is incorrect, because whenever I try to use make main, I get this error:

g++ -o main main.o Nucleus.o Mass.o Chart.o Yrast.o TlArray.o  LevelDensity.o Angle.o Nuclide.o LightP.o Evap.o AngleDist.o Random.o TlBarDist.o Scission.o  Weight.o   SigCharged.o SigBarDist.o Fus.o Run.o -L"C:\root_v6.28.06\lib" -lCore -lImt -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad -lROOTVecOps -lTree -lTreePlayer -lRint -lPostscript -lMatrix -lPhysics -lMathCore -lThread -lGui
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: main.o: in function `__static_initialization_and_destruction_0':
C:/root_v6.28.06/include/TVersionCheck.h:31:(.text+0x8c7): undefined reference to `TVersionCheck::TVersionCheck(int)'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: Run.o: in function `CRun::CRun(int, int, float, float, float, int, float, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, float, float, float)':
C:/Users/asaca/Master/AN1S1/SC/Proiect/Code3/Run.cpp:57:(.text+0x36a): undefined reference to `TFile::TFile(char const*, char const*, char const*, int)'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Users/asaca/Master/AN1S1/SC/Proiect/Code3/Run.cpp:58:(.text+0x3c5): undefined reference to `TTree::TTree(char const*, char const*, int, TDirectory*)'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Users/asaca/Master/AN1S1/SC/Proiect/Code3/Run.cpp:86:(.text+0x4c7): undefined reference to `Form(char const*, ...)'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Users/asaca/Master/AN1S1/SC/Proiect/Code3/Run.cpp:87:(.text+0x519): undefined reference to `Form(char const*, ...)'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Users/asaca/Master/AN1S1/SC/Proiect/Code3/Run.cpp:93:(.text+0x66e): undefined reference to `Form(char const*, ...)'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Users/asaca/Master/AN1S1/SC/Proiect/Code3/Run.cpp:95:(.text+0x6c3): undefined reference to `Form(char const*, ...)'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Users/asaca/Master/AN1S1/SC/Proiect/Code3/Run.cpp:96:(.text+0x718): undefined reference to `Form(char const*, ...)'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: Run.o:C:/Users/asaca/Master/AN1S1/SC/Proiect/Code3/Run.cpp:97: more undefined references to `Form(char const*, ...)' follow
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: Run.o: in function `CRun::CRun(int, int, float, float, float, int, float, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, float, float, float)':
C:/Users/asaca/Master/AN1S1/SC/Proiect/Code3/Run.cpp:57:(.text+0x108a): undefined reference to `TObject::operator delete(void*)'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Users/asaca/Master/AN1S1/SC/Proiect/Code3/Run.cpp:58:(.text+0x109f): undefined reference to `TObject::operator delete(void*)'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: Run.o: in function `__static_initialization_and_destruction_0':
C:/root_v6.28.06/include/TVersionCheck.h:31:(.text+0x10fd): undefined reference to `TVersionCheck::TVersionCheck(int)'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: Run.o: in function `TObject::operator new(unsigned long long)':
C:/root_v6.28.06/include/TObject.h:181:(.text$_ZN7TObjectnwEy[_ZN7TObjectnwEy]+0x14): undefined reference to `TStorage::ObjectAlloc(unsigned long long)'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: Run.o: in function `ROOT::Internal::TDirectoryAtomicAdapter::TDirectoryAtomicAdapter()':
C:/root_v6.28.06/include/TDirectory.h:345:(.text$_ZN4ROOT8Internal23TDirectoryAtomicAdapterC1Ev[_ZN4ROOT8Internal23TDirectoryAtomicAdapterC1Ev]+0xd): undefined reference to `TDirectory::GetSharedLocalCurrentDirectory()'
collect2.exe: error: ld returned 1 exit status
make: *** [Makefile:16: main] Error 1

I already checked the compiler and the make command and they work properly. make clean works correctly for my project and the make main command also begins correctly, it just crashes when it comes to libraries. I can't find the correct order of the libraries, if that is the issue.

Can you help me?

EDIT: - The complete list of libraries

-cppyy3_8.lib
-cppyy_backend3_8.lib
-libASImage.lib
-libASImageGui.lib
-libCling.lib
-libcomplexDict.lib
-libCore.lib
-libdequeDict.lib
-libEG.lib
-libEve.lib
-libFFTW.lib
-libFitPanel.lib
-libFITSIO.lib
-libFoam.lib
-libforward_listDict.lib
-libFTGL.lib
-libFumili.lib
-libGdml.lib
-libGed.lib
-libGenetic.lib
-libGenVector.lib
-libGeom.lib
-libGeomBuilder.lib
-libGeomPainter.lib
-libGLEW.lib
-libGpad.lib
-libGraf.lib
-libGraf3d.lib
-libGui.lib
-libGuiBld.lib
-libGuiHtml.lib
-libGviz3d.lib
-libHist.lib
-libHistFactory.lib
-libHistPainter.lib
-libHtml.lib
-libImt.lib
-liblistDict.lib
-libmap2Dict.lib
-libmapDict.lib
-libMathCore.lib
-libMatrix.lib
-libMinuit.lib
-libMinuit2.lib
-libMLP.lib
-libmultimap2Dict.lib
-libmultimapDict.lib
-libmultisetDict.lib
-libNet.lib
-libPhysics.lib
-libPostscript.lib
-libProof.lib
-libProofDraw.lib
-libProofPlayer.lib
-libPyMVA.lib
-libQuadp.lib
-libRCsg.lib
-libRecorder.lib
-libRGL.lib
-libRHTTP.lib
-libRHTTPSniff.lib
-libRint.lib
-libRIO.lib
-libRooBatchCompute.lib
-libRooBatchCompute_GENERIC.lib
-libRooFit.lib
-libRooFitCommon.lib
-libRooFitCore.lib
-libRooFitHS3.lib
-libRooFitJSONInterface.lib
-libRooFitRDataFrameHelpers.lib
-libRooStats.lib
-libRootAuth.lib
-libROOTBranchBrowseProvider.lib
-libROOTBrowsable.lib
-libROOTBrowserGeomWidget.lib
-libROOTBrowserRCanvasWidget.lib
-libROOTBrowserTCanvasWidget.lib
-libROOTBrowserTreeWidget.lib
-libROOTBrowserv7.lib
-libROOTBrowserWidgets.lib
-libROOTCanvasPainter.lib
-libROOTDataFrame.lib
-libROOTEve.lib
-libROOTFitPanelv7.lib
-libROOTGeomViewer.lib
-libROOTGpadv7.lib
-libROOTGraphicsPrimitives.lib
-libROOTHist.lib
-libROOTHistDraw.lib
-libROOTHistDrawProvider.lib
-libROOTLeafDraw6Provider.lib
-libROOTLeafDraw7Provider.lib
-libROOTNTuple.lib
-libROOTNTupleBrowseProvider.lib
-libROOTNTupleDraw6Provider.lib
-libROOTNTupleDraw7Provider.lib
-libROOTNTupleUtil.lib
-libROOTObjectDraw6Provider.lib
-libROOTObjectDraw7Provider.lib
-libROOTTMVASofie.lib
-libROOTTPython.lib
-libROOTTreeViewer.lib
-libROOTVecOps.lib
-libROOTWebDisplay.lib
-libSessionViewer.lib
-libsetDict.lib
-libSmatrix.lib
-libSpectrum.lib
-libSpectrumPainter.lib
-libSPlot.lib
-libSQLIO.lib
-libThread.lib
-libTMVA.lib
-libTMVAGui.lib
-libTree.lib
-libTreePlayer.lib
-libTreeViewer.lib
-libunordered_mapDict.lib
-libunordered_multimapDict.lib
-libunordered_multisetDict.lib
-libunordered_setDict.lib
-libUnuran.lib
-libvectorDict.lib
-libWebGui6.lib
-libWin32gdk.lib
-libXMLIO.lib
-tbb.lib
-tbbmalloc.lib
-tbbmalloc_proxy.lib
0

There are 0 best solutions below