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