(no subject)

From: Hajime Nanjyo (nanjyo@icepp.s.u-tokyo.ac.jp)
Date: Mon Jan 26 2004 - 09:31:00 MET


Dear Rooters,

I am suffering troubles when constructing my class
with ifstream for ROOT I/O.

The shared library, libMyClass.so is successfully construced, but
it can't be linked to other objects and can't be loaded in ROOT(CINT).

If the line, 'std::ifstream fi;   //! excluded'
is commented out (at MyClass.h), all works fine.
    

Is there any idea to solve the problem?

/////////////////////////////////////////////////
The error outputs are...

root [1] gSystem->Load("libMyClass")
dlopen error: /afs/cern.ch/user/n/nanjo/MyClassStreamer/./libMyClass.so: undefined symbol: _ZNSt8ios_baseC2ERKS_
Load Error: Failed to load Dynamic link library /afs/cern.ch/user/n/nanjo/MyClassStreamer/./libMyClass.so
*** Interpreter error recovered ***

or

g++ `root-config --cflags` -c MyClass.C
rootcint -f MyClassDict.C -c MyClass.h MyClassLinkDef.h
g++ `root-config --cflags` -c MyClassDict.C
g++ -shared MyClass.o MyClassDict.o -o  libMyClass.so
// Succeed
g++ `root-config --cflags` -c write.C
// OK
g++ write.o libMyClass.so `root-config --libs` -o write
// Fail
libMyClass.so: undefined reference to `std::ios_base::ios_base[not-in-charge](std::ios_base const&)'
collect2: ld returned 1 exit status


/////////////////////////////////////////////////
My environment is...

uname -a
Red Hat Linux release 7.3 (Valhalla)
Linux lxplus072 2.4.20-28.7.cernsmp #1 SMP Fri Jan 9 12:37:16 CET 2004 i686 unknown.

g++ -v
Reading specs from /usr/local/gcc-alt-3.2/lib/gcc-lib/i686-pc-linux-gnu/3.2/specs
Configured with: ./configure --prefix=/usr/local/gcc-alt-3.2 --enable-shared
Thread model: posix
gcc version 3.2

The ROOT is on afs at CERN.
  *******************************************
  *                                         *
  *        W E L C O M E  to  R O O T       *
  *                                         *
  *   Version   3.10/02  16 December 2003   *
  *                                         *
  *  You are welcome to visit our Web site  *
  *          http://root.cern.ch            *
  *                                         *
  *******************************************
///////////////////////////////////////////////////




My codes are as follows.

///////////////////////////////////////////////////
//
//  MyClass.h
//
#ifndef MyClass_HH
#define MyClass_HH
#include <fstream>

#include "TObject.h"

class  MyClass: public TObject
{
 public:
  MyClass();
  ~MyClass();
  void Set(int s);

 public:
  int      size;
  std::ifstream fi;   //! excluded 
  ClassDef(MyClass,1) //MyClass
};

#endif
///////////////////////////////////////////////////
///////////////////////////////////////////////////
///////////////////////////////////////////////////
//
// MyClass.C
//
#include "MyClass.h"
#if !defined(__CINT__)
ClassImp(MyClass);
#endif
MyClass::MyClass() {
  size=0;
}

MyClass::~MyClass() {
  ;
}


void MyClass::Set(int s) {
  size=s;
}

///////////////////////////////////////////////////
//
// hadDataLinkDef.h
//
#ifdef __CINT__
#pragma link off all globals;
#pragma link off all classes;
#pragma link off all functions;
#pragma link C++ class MyClass;
#endif
///////////////////////////////////////////////////
///////////////////////////////////////////////////
///////////////////////////////////////////////////
//
// write.C
//
#include "TApplication.h"
#include "TFile.h"
#include "TTree.h"
#include "MyClass.h"

int main(int argc,char** argv)
{
  TApplication app("app", &argc, argv);
  TFile *tf = new TFile("tmp.root","RECREATE");
  TTree *tree = new TTree("tree","tmp");

  MyClass *data = new MyClass();
  tree->Branch("data","MyClass",&data);

  for (int i=0;i<5;++i) {
    data->Set(i+1);
    tree->Fill();
  }

  tf->Write();
  delete data;

  return 0;
}
///////////////////////////////////////////////////
///////////////////////////////////////////////////
///////////////////////////////////////////////////
//
// compile script
//
rm *.o
rm *.so
rm MyClassDict.C
g++ `root-config --cflags` -c MyClass.C
rootcint -f MyClassDict.C -c MyClass.h MyClassLinkDef.h
g++ `root-config --cflags` -c MyClassDict.C
g++ -shared MyClass.o MyClassDict.o -o  libMyClass.so 
g++ `root-config --cflags` -c write.C
g++ write.o libMyClass.so `root-config --libs` -o write
///////////////////////////////////////////////////



This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:05 MET