Re: [ROOT] Calling ctvmft fortran routine in ROOT

From: Jaroslaw Nowak (janow@ift.uni.wroc.pl)
Date: Thu Jun 20 2002 - 10:00:27 MEST


HEllo,
I still have a problem to call fortran routine.
I'm doing everything like in the first method in the
http://root.cern.ch/root/HowtoCERNLIB.html
my files:
//Vertexfunctions.h
#ifndef Vertexfunction_H
#define Vertexfunction_H


#if !defined (__CINT__) || defined (__MAKECINT__)
#include "Rtypes.h"
#endif

extern "C" Int_t ctvmft_(Int_t *iflun, Int_t *iflev, Int_t *ierr);

#endif

//VertexLinkDef.h
#ifdef __CINT__
#pragma link off all typedefs;
#pragma link off all globals;
#pragma link off all functions;
#pragma link off all classes;

#pragma link C++ function ctvmft_;
#endif
I execute the shhel script command:
rootcint -f Vertex.cxx -c Vertexfunctions.h VertexLinkDef.h

My main program
// rootVertex.cxx

#include "TROOT.h"
#include "TRint.h"
#include "Vertexfunctions.h"

TROOT root("Rint","The ROOT Interactive Interface");

int main(int argc, char **argv)
{
  
  if (0){
    Int_t iflun=0;
    Int_t iflev=0;
    Int_t ierr=0;
    prinft("ctvmft(iflun,iflev,ierr)=%g\n", ctvmft_(&iflun,&iflev,&ierr);
	   }
  
   // Create an interactive ROOT application
     

  TRint *theApp = new TRint("Rint", &argc, argv, 0, 0);

     // and enter the event loop...
     
     
     
     theApp->Run();
     
     delete theApp;

   return 0;
}
and after make rootVertex 
++ -O -Wall -fPIC -D_REENTRANT -I/usr/local/root/pro/root/include -c
rootVertex.cxx
rootVertex.cxx: In function `int main(int, char **)':
rootVertex.cxx:36: parse error before `;'
make: *** [rootVertex.o] Error 1

and if I delete part of the program:
// rootVertex.cxx

#include "TROOT.h"
#include "TRint.h"
#include "Vertexfunctions.h"

TROOT root("Rint","The ROOT Interactive Interface");

int main(int argc, char **argv)
{

/*  if (0){
    Int_t iflun=0;
    Int_t iflev=0;
    Int_t ierr=0;
    prinft("ctvmft(iflun,iflev,ierr)=%g\n", ctvmft_(&iflun,&iflev,&ierr);
           }
*/
   // Create an interactive ROOT application


  TRint *theApp = new TRint("Rint", &argc, argv, 0, 0);

     // and enter the event loop...



     theApp->Run();

     delete theApp;

   return 0;
}

$ make rootVertex 
g++ -O -Wall -fPIC -D_REENTRANT -I/usr/local/root/pro/root/include -c
rootVertex.cxx
cc -O  rootVertex.o   -o rootVertex
rootVertex.o: In function `main':
rootVertex.o(.text+0x1b): undefined reference to
`TStorage::ObjectAlloc(unsigned int)'
rootVertex.o(.text+0x38): undefined reference to `TRint::TRint(char const
*, int *, char **, void *, int, unsigned char)'
rootVertex.o(.text+0x7d): undefined reference to `TObject::operator
delete(void *)'
rootVertex.o: In function `global destructors keyed to main':
rootVertex.o(.text+0xc1): undefined reference to `TROOT::~TROOT(void)'
rootVertex.o: In function `global constructors keyed to main':
rootVertex.o(.text+0xf7): undefined reference to `TROOT::TROOT(char const
*, char const *, void (**)(void))'
collect2: ld returned 1 exit status
make: *** [rootVertex] Error 1
rm rootVertex.o


I don't understand where is a problem. If you find what I'm doing wrong
please sent me a massage.

Best regards,

Jarek Nowak 



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:57 MET