Undefined reference to TChain : :

Hello I am compiling a .cxx file with g++ 5.4.0 and there is a stack of exceptions like this :

/tmp/ccdPAUnX.o: In function main': dihadroncorr.cxx:(.text+0x45): undefined reference toTChain::TChain(char const*, char const*)'
dihadroncorr.cxx:(.text+0x1d1): undefined reference to TFile::TFile(char const*, char const*, char const*, int)' dihadroncorr.cxx:(.text+0x32f): undefined reference toAMPT::SetData(TChain*)'
dihadroncorr.cxx:(.text+0x3ef): undefined reference to TH2D::TH2D(char const*, char const*, int, double, double, int, double, double)' dihadroncorr.cxx:(.text+0x497): undefined reference toTH2D::TH2D(char const*, char const*, int, double, double, int, double, double)'
dihadroncorr.cxx:(.text+0x835): undefined reference to TObject::operator delete(void*)' dihadroncorr.cxx:(.text+0x861): undefined reference toTObject::operator delete(void*)‘
dihadroncorr.cxx:(.text+0x877): undefined reference to TObject::operator delete(void*)' dihadroncorr.cxx:(.text+0x88d): undefined reference toTObject::operator delete(void*)’
/tmp/ccdPAUnX.o: In function writeHistograms(char*)': dihadroncorr.cxx:(.text+0x185f): undefined reference toTFile::TFile(char const*, char const*, char const*, int)‘
dihadroncorr.cxx:(.text+0x1945): undefined reference to TObject::operator delete(void*)' /tmp/ccdPAUnX.o: In function__static_initialization_and_destruction_0(int, int)’:
dihadroncorr.cxx:(.text+0x1a20): undefined reference to TVersionCheck::TVersionCheck(int)' dihadroncorr.cxx:(.text+0x1c14): undefined reference toTH1D::TH1D(char const*, char const*, int, double, double)'
dihadroncorr.cxx:(.text+0x1c5e): undefined reference to TH1D::TH1D(char const*, char const*, int, double, double)' dihadroncorr.cxx:(.text+0x1c99): undefined reference toTH1D::TH1D(char const*, char const*, int, double, double)'
dihadroncorr.cxx:(.text+0x1d1a): undefined reference to TH2D::TH2D(char const*, char const*, int, double, double, int, double, double)' dihadroncorr.cxx:(.text+0x1d9b): undefined reference toTH2D::TH2D(char const*, char const*, int, double, double, int, double, double)‘
dihadroncorr.cxx:(.text+0x1dee): undefined reference to TH1D::TH1D(char const*, char const*, int, double, double)' dihadroncorr.cxx:(.text+0x1e67): undefined reference toTH2D::TH2D(char const*, char const*, int, double, double, int, double, double)‘
dihadroncorr.cxx:(.text+0x1ee0): undefined reference to TH2D::TH2D(char const*, char const*, int, double, double, int, double, double)' dihadroncorr.cxx:(.text+0x1f2a): undefined reference toTH1D::TH1D(char const*, char const*, int, double, double)‘
dihadroncorr.cxx:(.text+0x1f74): undefined reference to TH1D::TH1D(char const*, char const*, int, double, double)' dihadroncorr.cxx:(.text+0x1fbe): undefined reference toTH1D::TH1D(char const*, char const*, int, double, double)‘
dihadroncorr.cxx:(.text+0x2008): undefined reference to TH1D::TH1D(char const*, char const*, int, double, double)' dihadroncorr.cxx:(.text+0x2052): undefined reference toTH1D::TH1D(char const*, char const*, int, double, double)’
/tmp/ccdPAUnX.o:dihadroncorr.cxx:(.text+0x209c): more undefined references to TH1D::TH1D(char const*, char const*, int, double, double)' follow /tmp/ccdPAUnX.o: In function__static_initialization_and_destruction_0(int, int)’:
dihadroncorr.cxx:(.text+0x222e): undefined reference to TH2D::TH2D(char const*, char const*, int, double, double, int, double, double)' dihadroncorr.cxx:(.text+0x22ae): undefined reference toTH2D::TH2D(char const*, char const*, int, double, double, int, double, double)‘
dihadroncorr.cxx:(.text+0x232e): undefined reference to TH2D::TH2D(char const*, char const*, int, double, double, int, double, double)' dihadroncorr.cxx:(.text+0x2369): undefined reference toTH1D::TH1D(char const*, char const*, int, double, double)‘
dihadroncorr.cxx:(.text+0x2380): undefined reference to TObject::operator delete(void*)' dihadroncorr.cxx:(.text+0x2396): undefined reference toTObject::operator delete(void*)‘
dihadroncorr.cxx:(.text+0x23ac): undefined reference to TObject::operator delete(void*)' dihadroncorr.cxx:(.text+0x23c2): undefined reference toTObject::operator delete(void*)‘
dihadroncorr.cxx:(.text+0x23d8): undefined reference to TObject::operator delete(void*)' /tmp/ccdPAUnX.o:dihadroncorr.cxx:(.text+0x23ee): more undefined references toTObject::operator delete(void*)’ follow
/tmp/ccdPAUnX.o: In function TObject::operator new(unsigned long)': dihadroncorr.cxx:(.text._ZN7TObjectnwEm[_ZN7TObjectnwEm]+0x14): undefined reference toTStorage::ObjectAlloc(unsigned long)’
/tmp/ccdPAUnX.o: In function TObject::TObject()': dihadroncorr.cxx:(.text._ZN7TObjectC2Ev[_ZN7TObjectC5Ev]+0xd): undefined reference tovtable for TObject’
dihadroncorr.cxx:(.text._ZN7TObjectC2Ev[_ZN7TObjectC5Ev]+0x5a): undefined reference to TObject::fgObjectStat' dihadroncorr.cxx:(.text._ZN7TObjectC2Ev[_ZN7TObjectC5Ev]+0x6e): undefined reference toTObject::AddToTObjectTable(TObject*)’
/tmp/ccdPAUnX.o: In function TCanvasImp::IsA() const': dihadroncorr.cxx:(.text._ZNK10TCanvasImp3IsAEv[_ZNK10TCanvasImp3IsAEv]+0xd): undefined reference toTCanvasImp::Class()’
/tmp/ccdPAUnX.o: In function TCanvasImp::ShowMembers(TMemberInspector&) const': dihadroncorr.cxx:(.text._ZNK10TCanvasImp11ShowMembersER16TMemberInspector[_ZNK10TCanvasImp11ShowMembersER16TMemberInspector]+0x11): undefined reference toTCanvasImp::Class()‘
dihadroncorr.cxx:(.text._ZNK10TCanvasImp11ShowMembersER16TMemberInspector[_ZNK10TCanvasImp11ShowMembersER16TMemberInspector]+0x27): undefined reference to ROOT::Class_ShowMembers(TClass*, void const*, TMemberInspector&)' /tmp/ccdPAUnX.o: In functionTVector3::~TVector3()’:
dihadroncorr.cxx:(.text._ZN8TVector3D2Ev[_ZN8TVector3D5Ev]+0xd): undefined reference to vtable for TVector3' dihadroncorr.cxx:(.text._ZN8TVector3D2Ev[_ZN8TVector3D5Ev]+0x20): undefined reference toTObject::~TObject()‘
dihadroncorr.cxx:(.text._ZN8TVector3D2Ev[_ZN8TVector3D5Ev]+0x35): undefined reference to TObject::operator delete(void*)' /tmp/ccdPAUnX.o: In functionTVector3::~TVector3()’:
dihadroncorr.cxx:(.text._ZN8TVector3D0Ev[_ZN8TVector3D5Ev]+0x20): undefined reference to TObject::operator delete(void*)' /tmp/ccdPAUnX.o: In functionTVector3::TVector3(double, double, double)’:
dihadroncorr.cxx:(.text._ZN8TVector3C2Eddd[_ZN8TVector3C5Eddd]+0x28): undefined reference to vtable for TVector3' /tmp/ccdPAUnX.o: In functionTVector3::Pt() const’:
dihadroncorr.cxx:(.text._ZNK8TVector32PtEv[_ZNK8TVector32PtEv]+0x14): undefined reference to TVector3::Perp() const' /tmp/ccdPAUnX.o:(.rodata._ZTV10TCanvasImp[_ZTV10TCanvasImp]+0x100): undefined reference toTCanvasImp::Streamer(TBuffer&)'
collect2: error: ld returned 1 exit status

Can anyone suggest what to do?

Hi,

hard to say w/o the compilation command. Try:

g++ -o myexec -fPIC `root-config --cflags --libs`

Perhaps this will help as a first iteration…

Hey,
are you linking against ROOT? I.e. are you compiling with
g++ -o yourfile yourfile.cxx $(root-config --libs --cflags)? Note that the root-config command must be put after the executable that depends on it.

Hi
It worked !
Now there is only one.

==> “undefined reference to `AMPT::SetData(TChain*)”

Can you tell me why this kind of exception occur? Is this all about linking the the libraries?

Hi, yes,
undefined references refer to some object/function that you use that is declared in one of your headers but is not defined in any of the libraries/object files that you link together to form your executable.

You are not linking this AMPT library or whatever entity defines AMPT::SetData (I don’t think this is ROOT though, it must be your own specific library/framework).

Yes, it doesnot belong to ROOT.
Thank you

You have to link the AMPT library too. If that library does not provide a utility command like $(root-config --libs --cflags), then you will have to use the -L and -l compiler flags – you can easily google their usage.

Yes it has been solved.
Thanks for your remarkable suggestions.

1 Like

Marking it as solved then. Glad I could help!

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