Hi Colin, > -The first one looks to be related to the fact that the compiler (gcc > version 2.96) doesn't accept anymore the following trick : > mTh= new TThread("memberfunction", > (void(*) (void *))&Thread0, No one compiler can accept it. It can work only for static functions. Victor Colin Bernet wrote: > > Hi rooters, > > I'm still trying to compile a program (working on redhat 6.1) on redhat > 7.0. The attached program is the example of thread using you can find at > > http://www-linux.gsi.de/~go4/HOWTOthreads/howtothreads.html#tth_sEc8.3 > I shows the 2 unrelated problems I encounter. > > -The first one looks to be related to the fact that the compiler (gcc > version 2.96) doesn't accept anymore the following trick : > mTh= new TThread("memberfunction", > (void(*) (void *))&Thread0, > (void*) this); > > on RH6.1, I just get a warning message like: > Myclass.cxx:98: warning: converting from `void (Myclass::*)(void *)' to > `void *' ) > > on RH7.0, this is unfortunately an error : > > TThreadframe.cxx: In method > `Int_t TThreadframe::Threadstart ()': TThreadframe.cxx:129: ISO C++ > forbids taking the address of a non-static member function to form a > pointer to > member > function. Say `&TThreadframe::Thread0' > > To check that, just untar the attached example, and type make. > > - the second problem is the "different exceptions" stuff I was talking > about in a previous email : > As it occurs while compiling another module, you have to modify the > Makefile. > replace the line : > TMhs3run.$(ObjSuf): TMhs3run.cxx libTMhs3.so libTThreadframe.so > by : > TMhs3run.$(ObjSuf): TMhs3run.cxx libTMhs3.so > and make. > > TMhs3run.cxx cannot be compiled because : > g++ -g -Wall -ansi -frtti -fexceptions -DR__THREAD -D_THREADLIB_ -fPIC > -I/usr/l ocal/root/include -c > TMhs3run.cxx In file included from /usr/include/math.h:64, > from /usr/local/root/include/G__ci.h:268, > from /usr/local/root/include/TSystem.h:31, > from /usr/local/root/include/TThread.h:38, > from TThreadframe.h:32, > from TMhs3.h:2, > from TMhs3run.cxx:11: /usr/include/bits/mathcalls.h:54: > > declaration of `double acos (double) throw ()' throws different > exceptions > /usr/local/root/include/TMath.h:306: than previous declaration `double > acos (double)' /usr/include/bits/mathcalls.h:56: declaration of `double > asin (double) throw ()' throws different exceptions > /usr/local/root/include/TMath.h:305: than previous declaration `double > asin (double)' /usr/include/bits/mathcalls.h:58: declaration of `double > ... > > In TMath.h, we have the following lines : > > #if defined(R__AIX) || defined(R__MAC) || defined(R__SOLARIS_CC50) || \ > defined(R__USESTHROW) > // math functions are defined inline so we have to include them here > #include <math.h> > #else // don't want to include complete <math.h> > extern "C" { > extern double sin(double); > extern double cos(double); > extern double tan(double); > extern double sinh(double); > extern double cosh(double); > extern double tanh(double); > extern double asin(double); > extern double acos(double); > extern double atan(double); > extern double atan2(double, double); > extern double sqrt(double); > extern double exp(double); > extern double pow(double, double); > extern double log(double); > extern double log10(double); > } > #endif > > The problem comes from the extern declarations. If I replace them by > #include <math.h> the "different exceptions" errors disappear. So > the variable R__USESTHROW is not defined, but should be. I can be done > in the Makefile, but I think it would be better if exceptions work by > default. > > cheers, > > Colin > > -- > Colin Bernet > Tel. +49-6131/39-23192 > Fax +49-6131/39-22964 > > ------------------------------------------------------------------------------------------------------------------------------------ > Name: Threadtest.tar.gz > Threadtest.tar.gz Type: Unix Tape Archive (application/x-tar) > Encoding: base64 -- Victor M. Perevoztchikov perev@bnl.gov perev@vxcern.cern.ch Brookhaven National Laboratory MS 510A PO Box 5000 Upton NY 11973-5000 tel office : 631-344-7894; fax 631-344-4206; home 631-345-2690
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:45 MET