[ROOT] TImage, ASImage does not exist in...

From: Bernd Reinhold (bernd.reinhold@cern.ch)
Date: Tue Apr 13 2004 - 23:13:20 MEST


Hi!

The program compiles without error. the executable creates the following output:

(...)
before1
Error in <TUnixSystem::DynamicPathName>: ASImage[.so | .sl | .dl | .a] does not exist in .:/usr/local//lib/root
after1

 *** Break *** segmentation violation
 Generating stack trace...
 0x42029188 in <unknown> from analysis_root_mysql
 0x42017589 in __libc_start_main + 0x95 from analysis_root_mysql
 0x080546b1 in __eh_alloc + 0x49 from analysis_root_mysql
Abort

In the code this is:
	cout << "before1" << endl;
	TImage *img = TImage::Create();
	cout << "after1" << endl;
	gSystem->ProcessEvents();
	img->FromPad(c1);

Is there a problem with TImage? ASImage IS not there, but why is it not? 
Is this a problem of my installation of root? 
I have 3.10.02. (Compiled from source with gcc 2.96)
configure linux --prefix=/usr/local/ --disable-shared --enable-alien
--enable-table --enable-ldap; gmake; gmake install;
I have CERN RedHat 7.3.4

(The program is trying to integrate ROOT and mysql++ (to explain the headers))

2 other (minor) issues:
1. There is a segmentation violation if I uncomment gROOT... and gDebug...
int main(...)
//	gROOT->Reset();
//	gDebug=7;
2. the compiler complains about the 'kJpeg'. Can you tell me the correct syntax?
img->WriteImage(p.str(), kJpeg);

--------appendix--------
1. the program
2. the makefile (for this program)

#include <iostream>
#include <sqlplus.hh>
//root-includes
#include <TSystem.h>
#include <TROOT.h>
#include <TPad.h>
#include <TH1.h>
#include <TImage.h>
#include <TCanvas.h>
//had them included in the other root-script, executed in CINT
#include <sstream>
#include "string"
#include "Riostream.h"
#include "vector"


int main (int argc, char *argv[]) {
//	gROOT->Reset();
//	gDebug=7;
	string SQLstring;
	Connection connection(use_exceptions);
	Int_t nlines=0;
	try { // the entire main block is one big try block;
		connection.connect("localdb", "hmmm", "lala", "oufff");
	if (argc == 1){
		SQLstring="SELECT pullforce FROM pt_main as M, pt_rawdata as R WHERE M.ID=R.ID and M.status=R.status and M.batch like '%HSA%' and M.status=1";
	} else if (argc == 2){
		SQLstring= argv[1];
	} else {
		//the SQL-query as argument
		cerr << "The program expects either 2 or 1 argument(s). But it found " << argc << " argument(s)." << endl;
		return -1;
	}
	// create a new object and connect based on any (if any) arguments
	// passed to main();
    
	Query query = connection.query();  // create a new query object
	
	// ignore any errors here
	// I hope to make this simpler soon, comment by Sinisa Milosevic
	query << SQLstring.c_str();
	Result res = query.store();
	if(res.empty()) throw BadQuery("the query was empty");

	cout << "query: " << query.preview() << endl;
	cout << "records found: " << res.size() << endl << endl;



//now populate the histogram; here is where root-objects are used for the first time...
//assume only one column (row[0])

	TH1D *h1 = new TH1D("h1", SQLstring.c_str(), 100,0,20);
	TCanvas *c1 = new TCanvas("c1", "thecanvas", 600, 400);
	Row row;
	Result::iterator i;
	for(i=res.begin(); i!=res.end(); i++){
		row=*i;
//		cout << row[0] << endl;
		h1->Fill((double)row[0]);
		nlines++;
	}

	h1->Draw();
	c1->Update();
	ostringstream p;
	p << "/home/reinhold_pcepcmt35/analysis/results/" << res.names(0).c_str() <<".jpg" << ends;


	cout << "before1" << endl;
	TImage *img = TImage::Create();
	cout << "after1" << endl;
	gSystem->ProcessEvents();
	img->FromPad(c1);
	cout << "after2" << endl;	
//	img->WriteImage(p.str(), kJpeg);
	cout << "the jpg-image was stored in the following absolute path: "<< p.str() << endl;
	
	delete h1;
	delete c1;
	delete img;
	
	return 0;

  } catch (BadQuery &er) { // handle any connection or
                          // query errors that may come up
#ifdef USE_STANDARD_EXCEPTION
    cerr << "Error: " << er.what() << endl;
#else
    cerr << "Error: " << er.error << endl;
#endif
    return -1;
  } catch (BadConversion &er) { // handle bad conversions
  	cerr << "lines so far: " << nlines << endl;
#ifdef USE_STANDARD_EXCEPTION
    cerr << "Error: " << er.what() << "\"." << endl
         << "retrieved data size: " << er.retrieved
         << " actual data size: " << er.actual_size << endl;
#else
    cerr << "Error: Tried to convert \"" << er.data << "\" to a \""
         << er.type_name << "\"." << endl;
#endif
    return -1;
#ifdef USE_STANDARD_EXCEPTION		
  } catch (exception &er) {
    cerr << "Error: " << er.what() << endl;
    return -1;
#endif		
  }
  
}

---makefile---

analysis_root_mysql: analysis_root_mysql.o
	g++ -oanalysis_root_mysql analysis_root_mysql.o \
	-L/usr/local/mysql//lib/mysql \
	$(shell root-config --libs) \
	-lmysqlclient -lz \
	-L/usr/src/mysql++-1.7.9_patched/sqlplusint/ \
	-lsqlplus	
	
analysis_root_mysql.o: analysis_root_mysql.cpp
	g++ -c analysis_root_mysql.cpp -I/usr/local/mysql//include/mysql \
	-I/usr/src/mysql++-1.7.9_patched/sqlplusint \
	-I/usr/local/include/root



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