Hi,
I am under windows 7, using g++ (4.5.2) with mingw and I am trying to compile and link a simple code using ROOT classes (creating a TH1F) to test it. I am using ROOT 5.30/01 the binaries of which I installed using the VC++ 9 MSI installer.
I have set the PATH and LD_LIBRARY_PATH environment variables to point to the bin and lib directories of ROOT. The code compiles but it has some problem during linking:
this is OK
g++ -I/c/root/include -c test.cpp
this is not OK
g++ -o test -L/c/root/bin -L/c/root/lib -lGpad -lHist -lGraf -lGraf3d -lTree -lRint -lPostscript -lMatrix -lPhysics -lMathCore -lRIO -lNet -lThread -lCore -lCint -lm test.o
test.o:test.cpp:(.text+0x60): undefined reference to TH1F::TH1F(char const*, char const*, int, double, double)' test.o:test.cpp:(.text+0xb9): undefined reference to
TObject::operator delete(void*)'
test.o:test.cpp:(.text+0x118): undefined reference to TVersionCheck::TVersionCheck(int)' test.o:test.cpp:(.text$_ZN7TObjectnwEj[TObject::operator new(unsigned int)]+0xd): undefined reference to
TStorage::ObjectAlloc(unsigned int)'
collect2: ld returned 1 exit status
The code was this (it compiles fine without the ROOT stuff):
#include <iostream>
#include <TH1F.h>
#include <TSystem.h>
#include <TROOT.h>
using namespace std;
int main( int argc, char** argv )
{
TH1F * h = new TH1F("h1", "h1",100, 0, 100);
delete h;
cout << "Hello World" << endl;
return 0;
}
Perhaps I forgot some lines? Or other step? Under linux I usually have some custom classes as well and there I need to generate and compile a dictionary for those classes and that works OK. But when trying the same exercise (creating class with ClassDef/ClassImp lines, generating dictionary with rootcint, compiling and linking all of them) I get similar undefined reference error from the linker.
Thanks for any help,
Balint