I trimmed my example down so it is easier to have a look, I think I am missing some step but I just cannot see which one, neither in the documentation or looking up in forums:
CalibrationConstants.h
[code]#ifndef CALIBRATIONCONSTANTS_H
#define CALIBRATIONCONSTANTS_H
#include “TObject.h”
#include “TString.h”
class CalibrationConstants : public TObject {
private:
float m_defaultPrs;
public:
// Constructors
CalibrationConstants();
CalibrationConstants( TString name );
// ROOT
ClassDef( CalibrationConstants , 1 );
};
#endif[/code]
CalibrationConstants.cxx
[code]#include “CalibrationConstants.h”
#include
CalibrationConstants::CalibrationConstants() : m_defaultPrs( 11.0 ) {};
CalibrationConstants::CalibrationConstants( TString name ) : m_defaultPrs( 11.0 ) { std::cout << name << std::endl; };
#if !defined( CINT )
ClassImp( CalibrationConstants );
#endif[/code]
Calibrator.h
[code]#include
#include <TObject.h>
#include “CalibrationConstants.h”
class Calibrator : public TObject {
private:
CalibrationConstants* m_constantsInit;
public:
// Constructors and configuration
Calibrator();
ClassDef( Calibrator , 1 );
};[/code]
Calibrator.cxx
[code]#include “Calibrator.h”
#if !defined( CINT )
ClassImp( Calibrator );
#endif
Calibrator::Calibrator() {
m_constantsInit = new CalibrationConstants();
}
[/code]
Then I do:
[code]albert@res09-susp-399:~/Arxiu/Fisica/LHCb/CaloCalibration/Calibration/analysis/PionCalibration$ root -q -b CalibrationConstants.cxx+
ROOT 5.22/00 (trunk@26997, De 18 2008, 10:17:00 on macosx)
CINT/ROOT C/C++ Interpreter version 5.16.29, Jan 08, 2008
Type ? for help. Commands must be C++ statements.
Enclose multiple statements between { }.
root [0]
Processing CalibrationConstants.cxx+…
(class CalibrationConstants)43254704
albert@res09-susp-399:~/Arxiu/Fisica/LHCb/CaloCalibration/Calibration/analysis/PionCalibration$ root -q -b Calibrator.cxx+
ROOT 5.22/00 (trunk@26997, De 18 2008, 10:17:00 on macosx)
CINT/ROOT C/C++ Interpreter version 5.16.29, Jan 08, 2008
Type ? for help. Commands must be C++ statements.
Enclose multiple statements between { }.
root [0]
Processing Calibrator.cxx+…
Info in TUnixSystem::ACLiC: creating shared library /Users/albert/Arxiu/Fisica/LHCb/CaloCalibration/Calibration/analysis/PionCalibration/./Calibrator_cxx.so
dlopen error: dlopen(/Users/albert/Arxiu/Fisica/LHCb/CaloCalibration/Calibration/analysis/PionCalibration/./Calibrator_cxx.so, 10): Symbol not found: __ZN20CalibrationConstantsC1Ev
Referenced from: /Users/albert/Arxiu/Fisica/LHCb/CaloCalibration/Calibration/analysis/PionCalibration/./Calibrator_cxx.so
Expected in: dynamic lookup
Load Error: Failed to load Dynamic link library /Users/albert/Arxiu/Fisica/LHCb/CaloCalibration/Calibration/analysis/PionCalibration/./Calibrator_cxx.so
Undefined symbols:
“CalibrationConstants::CalibrationConstants()”, referenced from:
Calibrator::Calibrator()in test1_cxx_ACLiC_dict.o
Calibrator::Calibrator()in test1_cxx_ACLiC_dict.o
"_main", referenced from:
start in crt1.10.5.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
*** Interpreter error recovered ***
[/code]
I don’t know if I have to link some libraries or how to do it… Thanks in advance!!
Albert